3

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 3a()直到我等了 5 秒并且打印了 2 才真正返回功能。我正在做一个我更喜欢轻量级的扩展,所以我宁愿不使用 3rd 方库。

有没有办法做到这一点?

4

1 回答 1

3

隐式等待是不好的,原因在这个博客中有很好的介绍。简而言之,考虑一下为什么不需要锁定 JavaScript。这是因为我们不担心会不择手段地先发制人。

此外,正如 Daniel 在评论中提到的那样,await也不允许使用 global,大概是为了向后兼容。

您可以通过像这样包装您的顶级代码来解决此问题:

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; }));

不完美,但可以完成工作,而不会颠倒一切。

于 2017-02-10T06:04:36.147 回答