pra*_*999 4 javascript promise typescript es6-promise
我正在尝试调用一个函数,该函数Promise.resolve基于某些条件使用返回已解决的Promise 。
该函数的过度简化版本如下:
function fullFilledPromiseReturner(num: number) {
if (num > 5) {
return Promise.resolve(5);
} else {
return Promise.resolve();
}
}
fullFilledPromiseReturner(4).then(data => {
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
现在TypeScript不允许它通过编译器,并引发以下错误:
[ts] Cannot invoke an expression whose type lacks a call signature. Type '(<TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResu...' has no compatible call signatures.
我究竟做错了什么?
问题在于您的函数将返回,Promise<void> | Promise<number>因为您在不同的分支上返回了不同的promise类型。因此,它then也是一个联合类型,您将无法调用它,因为没有一个签名是常见的。
最简单的解决方案是显式键入该函数以返回Promise联合类型而不是联合的a Promisses:
function fullFilledPromiseReturner(num: number): Promise<number | void> {
if (num > 5) {
return Promise.resolve(5);
} else {
return Promise.resolve();
}
}
fullFilledPromiseReturner(4).then(data => {
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1182 次 |
| 最近记录: |