如何拒绝由 async
/ await
函数返回的承诺?
例如原来:
foo(id: string): Promise<A> {
return new Promise((resolve, reject) => {
someAsyncPromise().then((value)=>resolve(200)).catch((err)=>reject(400))
});
}
翻译成 async
/ await
:
async foo(id: string): Promise<A> {
try{
await someAsyncPromise();
return 200;
} catch(error) {//here goes if someAsyncPromise() rejected}
return 400; //this will result in a resolved promise.
});
}
那么,在这种情况下,我怎么能正确拒绝这个承诺呢?
原文由 Phoenix 发布,翻译遵循 CC BY-SA 4.0 许可协议
您最好的选择是
throw
一个Error
包装该值,这会导致一个被拒绝的承诺Error
包装该值:您也可以只
throw
值,但是没有堆栈跟踪信息:或者,使用
Error
包装值返回一个被拒绝的承诺,但这不是惯用的:(或者只是
return Promise.reject(400);
,但同样,没有上下文信息。)在您的情况下,当您使用
TypeScript
和foo
的返回值是Promise<A>
时,您将使用这个:在
async
/await
情况下,最后一个可能有点语义不匹配,但它确实有效。如果你抛出一个
Error
,那么它与任何消耗你的foo
的结果的东西都很好await
语法: