myWrapper
await
应该兑现promise 吗?还是应该立即归还?
这取决于你.没有必要在async
函数的顶层执行return await
,但might通过在异步堆栈跟踪中包含async
函数,使异步堆栈跟踪更清晰.因此,您可以出于这个原因保留它,也可以出于这个原因删除它.:-)(我应该注意到,在最新的V8中,我再也看不到堆栈跟踪的区别了,两者都包括包装器函数.因此,在这方面,事情可能已经有所进展;我知道异步堆栈跟踪在一段时间内是一个热门的开发领域.)
如果没有await
,该函数是否应标记为async
?
不,如果你go 掉await
,就没有理由变成async
.
写这篇等待新promise 的文章有什么惩罚吗东西
如果你特别指的是return await
中的await
,那么不是,当你使用await
的promise 是一个本地promise 时.它曾经在async
函数promise 的解决方案中引入了一个(基本上无害的)异步勾号,但该规范被更新以允许引擎避免它.
如果你想捕捉函数中promise 的拒绝,或者你想在finally
子句中做一些事情,或者类似的事情——任何async
函数的逻辑依赖于在async
函数本身返回之前解决promise 的事情,在async
函数is的顶层使用return await
not是必要的.例如,你需要它在这里:
async function example() {
try {
return await somethingThatProvidesAPromise();
} catch (e) {
throw new WrapperError(e);
}
}
这里呢
async function example() {
const lock = acquireLock();
try {
return await doSomethingWith(lock);
} finally {
releaseLock(lock); // (Where `releaseLock` guarantees it nevers throws)
}
}
如果没有await
,这两个都不正确.