kel*_*dar 0 javascript arguments promise typescript
为什么我编写的 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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
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'.
Run Code Online (Sandbox Code Playgroud)
的定义resolveLocalFilesystemUrl如下:
resolveLocalFilesystemUrl(fileUrl: string): Promise<Entry>;
Run Code Online (Sandbox Code Playgroud)
FileEntry是 的子类Entry,因此是强制转换的返回值。然而,错误大约在Promise.reject.
如果我将拒绝行更改为以下内容,它就会起作用:
return Promise.reject<FileEntry>(err);
Run Code Online (Sandbox Code Playgroud)
我需要返回吗Promise.reject(...)?正确的实施方式是什么?
要返回承诺,您需要创建一个新的承诺实例并返回该实例。构造函数采用一个函数,该函数接收您在逻辑成功或失败时应该调用的解析和拒绝回调。
为了让你的承诺“返回”你的结果,你不写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
});
}
Run Code Online (Sandbox Code Playgroud)
因此,在您的情况下,它应该如下所示:
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
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
如果您想了解有关承诺的更多信息,请阅读此处的示例: https: //developers.google.com/web/fundamentals/primers/promises
| 归档时间: |
|
| 查看次数: |
8104 次 |
| 最近记录: |