如何拒绝
例如:
foo(id: string): Promise<A> {
return new Promise((resolve, reject) => {
someAsyncPromise().then((value)=>resolve(200)).catch((err)=>reject(400))
});
}
转换为
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.
});
}
那么,在这种情况下,我怎么能恰当地拒绝这个承诺呢?
您的最佳选择是
} catch (error) {
throw new Error(400);
}
您也可以只
} catch (error) {
throw 400;
}
或者,返回一个被拒绝的承诺,并用
} catch (error) {
return Promise.reject(new Error(400));
}
(或者只是
在您的示例中,由于您使用的是
return Promise.reject<A>(400 /*or Error*/ );
在
如果抛出一个
try {
await foo();
} catch (error) {
// Here, `error` would be an `Error` (with stack trace, etc.).
// Whereas if you used `throw 400`, it would just be `400`.
}
可能还应该提到的是,您可以在调用异步操作之后简单地链接一个
await foo().catch(error => console.log(error));
这样,如果您不喜欢
您可以创建一个包装函数,它接受一个promise,如果没有错误,则返回一个包含数据的数组,如果有错误,则返回错误。
function safePromise(promise) {
return promise.then(data => [ data ]).catch(error => [ null, error ]);
}
在ES7和异步函数中使用如下所示:
async function checkItem() {
const [ item, error ] = await safePromise(getItem(id));
if (error) { return null; } // handle error and return
return item; // no error so safe to use item
}