JavaScript 默认等待而不是手动等待
JavaScript await by default instead of manually
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 之后才真正返回。我正在做一个我更喜欢轻量级的扩展,所以我不想使用第 3 方库。
有什么办法吗?
隐式等待是不好的,原因在 this blog 中有详细介绍。简而言之,考虑一下为什么不需要锁定 JavaScript。这是因为我们不担心成为 pre-empted willy-nilly.
此外,正如 Daniel 在评论中提到的,全局 await
也是不允许的,大概是为了向后兼容。
您可以像这样包装 top-level 代码来解决此问题:
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; }));
不完美,但完成了工作,没有颠倒一切。
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 之后才真正返回。我正在做一个我更喜欢轻量级的扩展,所以我不想使用第 3 方库。
有什么办法吗?
隐式等待是不好的,原因在 this blog 中有详细介绍。简而言之,考虑一下为什么不需要锁定 JavaScript。这是因为我们不担心成为 pre-empted willy-nilly.
此外,正如 Daniel 在评论中提到的,全局 await
也是不允许的,大概是为了向后兼容。
您可以像这样包装 top-level 代码来解决此问题:
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; }));
不完美,但完成了工作,没有颠倒一切。