Async/await 确实很方便,但我想要与它们相反的行为。我希望函数能够屈服,除非我手动指定它们继续并行运行,而不是其他函数继续运行,除非我手动要求它们等待承诺。
例如,这段代码会打印出1 3 2
:
function wait(ms) {
return new Promise(r => setTimeout(r, ms));
}
async function a() {
console.log("1");
await wait(5000);
console.log("2");
}
a();
console.log("3");
我想要打印出来1 2 3
, 具有函数a()
直到我等了 5 秒并打印了 2 后才真正返回。我正在制作一个我希望轻量级的扩展,所以我不想使用第三方库。
有什么办法可以做到这一点吗?
隐式等待是不好的,原因在这个博客。简而言之,考虑一下为什么 JavaScript 中不需要锁定。这是因为我们不担心被人抢先。
另外,正如丹尼尔在评论中提到的,全球await
也不允许,大概是为了向后兼容。
您可以通过像这样包装顶级代码来解决此问题:
let wait = ms => new Promise(r => setTimeout(r, ms));
async function a() {
console.log("1");
await wait(5000);
console.log("2");
}
(async () => {
// Put your top level code here!
await a();
console.log("3");
})().catch(e => setTimeout(() => { throw e; }));
并不完美,但完成了工作,没有把一切搞得天翻地覆。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)