当编写异步函数的时候,await
,return
,return await
三者之间有一些区别,从中选取正确的方式是很重要的。 我们从下面这个异步函数开始:
async function waitAndMaybeReject() {
// 等待1秒钟
await new Promise(resolve => setTimeout(resolve, 1000));
// 抛一枚硬币
const isHeads = Boolean(Math.round(Math.random()));
if (isHeads) return 'yay';
throw Error('Boo!');
}
上面的函数会等待1秒钟后返回一个promise,然后有50%的机会成功返回yay
或者抛出一个error。让我们用几种稍微不同的方式使用它。
【注:如果您想尝试运行下面的代码来验证结果,请创建
async
函数中使用await
来调用foo
函数】
直接调用
async function foo() {
try {
waitAndMaybeReject();
} catch (e) {
return 'caught';
}
}
在此处,如果调用了foo
,返回的promise的状态始终都是resolved