我今天看到了这段代码片段,这是我第一次看到这个职位。我从没想过要把它放在这里。
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应用于所有异步命令吗?等待在哪里?
否-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” });
}
异步迭代器对于异步生成要生成的项目很有用。它们不暗示从生成器产生的项目的任何内容。之后