语句语法澄清中的等待位置

问题描述 投票:0回答:1

我今天看到了这段代码片段,这是我第一次看到这个职位。我从没想过要把它放在这里。

for await (const req of s) {
  req.rspond({body: “Hello world\n” });
}

我会把它放在req之前(实际的异步命令)

for (const req of s) {
  await req.rspond({body: “Hello world\n” });
}

我在操纵up的代码中使用了类似的模式。

  for (let i of a) {
      await page.click(sel);
      await page.waitFor(wait);
}

我的问题是,如果我这样编码,它是否仍然可以正常工作?

  for await (let i of a) {
      page.click(sel);
      page.waitFor(wait);
}

并将await应用于所有异步命令吗?等待在哪里?

javascript syntax async-await
1个回答
1
投票

否-for await特殊用于与暴露异步可迭代接口的对象进行交互的方式:

const wait = () => new Promise(resolve => setTimeout(resolve, 500));
const obj = {
  async *[Symbol.asyncIterator]() {
    for (let i = 0; i < 3; i++) {
      // fetching item...
      await wait();
      yield i;
    }
  }
};

(async () => {
  for await (const item of obj) {
    console.log(item);
  }
})();

如果您有一个[[normal迭代器,就像使用const req of s一样,并且您需要为该迭代器产生的每个项目调用一个异步函数,那么当前代码仍然是唯一的方法,例如:

for (const req of s) { await req.rspond({body: “Hello world\n” }); }
异步迭代器对于异步生成要生成的项目很有用。它们不暗示从生成器产生的项目

之后

的任何内容。
© www.soinside.com 2019 - 2024. All rights reserved.