gpt4 book ai didi

javascript - Promise.reject 出现 TypeScript 错误

转载 作者:行者123 更新时间:2023-11-28 17:43:53 25 4
gpt4 key购买 nike

为什么我使用我编写的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com