javascript - Promise.reject 出现 TypeScript 错误

标签 javascript typescript promise arguments

为什么我使用我编写的 TypeScript 方法收到以下编译错误:

getFile(path: string): Promise<FileEntry> {
  return this.file.resolveLocalFilesystemUrl(path)
    .then(entry => {
      if (entry.isFile) {
        return <FileEntry>entry;
      } else {
        let err = new FileError(13);         
        err.message = 'input is not a file';
        return Promise.reject(err);
      }
    });
}

我收到错误:

Argument of type '(entry: Entry) => Promise<never> | FileEntry' is not assignable to parameter of type '(value: Entry) => PromiseLike<never>'. Type 'Promise<never> | FileEntry' is not assignable to type 'PromiseLike<never>'. Type 'FileEntry' is not assignable to type 'PromiseLike<never>'. Property 'then' is  missing in type 'FileEntry'.

resolveLocalFilesystemUrl 的定义如下:

resolveLocalFilesystemUrl(fileUrl: string): Promise<Entry>;

FileEntryEntry 的子类,因此强制返回。但是,错误发生在 Promise.reject 附近。

如果我将拒绝行更改为以下内容,它就会起作用:

return Promise.reject<FileEntry>(err);

我需要返回 Promise.reject(...) 以及正确的实现是什么?

最佳答案

要返回 promise ,您需要创建一个新的 promise 实例并返回该实例。构造函数采用一个函数,该函数接收您在逻辑成功或失败时应该调用的解析和拒绝回调。

要让您的 Promise“返回”结果,您不要编写 return result,而是调用 resolve(result)

getFile(path: string): Promise<FileEntry> {
  return new Promise<FileEntry>((resolve, reject) => {
    // Your logic here.
    // call resolve() on success
    // or reject() on failure
  });
}

因此,在您的情况下,它应该如下所示:

getFile(path: string): Promise<FileEntry> {
  return new Promise<FileEntry>((resolve, reject) => {
    this.file.resolveLocalFilesystemUrl(path)
    .then(entry => {
      if (entry.isFile) {
        resolve(<FileEntry>entry); // Success
      } else {
        let err = new FileError(13);         
        err.message = 'input is not a file';
        reject(err); // Error
      }
    });
  });
}

如果您想了解有关 Promise 的更多信息,请阅读此处的示例: https://developers.google.com/web/fundamentals/primers/promises

关于javascript - Promise.reject 出现 TypeScript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47264100/

相关文章:

javascript - 转换 12 小时 hh :mm AM/PM to 24-hour hh:mm

javascript - 如何通过数组 Javascript 拆分对象数组

javascript - 类型 'click' 上不存在属性 'never' 。 TS2339

reactjs - typescript :重新分配类型缩小后的 react 查询useQuery数据不起作用

android - 对 Android 的 promise ?

Javascript,两个异步/等待和 promise 功能,但一个正在工作,另一个不工作

javascript - 使用 === 运算符来测试未定义而不是使用 == 运算符有什么好处?

javascript - data-..attributes 没有在我的 html Bootstrap 代码中突出显示

javascript - 在单行中声明多个变量 + Angular 2 和 TypeScript

javascript - NodeJS - 无限调用 promise 函数