javascript - await 在语句语法说明中的位置
问题描述
我今天看到了这个代码片段,这是我第一次在这个位置看到 await。我从没想过把它放在这里。
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” });
}
我在我的 puppeteer 代码中使用了类似的模式。
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);
}
})();
如果你有一个普通的迭代器,就像你做的那样const req of s
,你需要为迭代器产生的每个项目调用一个异步函数,那么你当前的代码仍然是唯一的方法,例如:
for (const req of s) {
await req.rspond({body: “Hello world\n” });
}
异步迭代器对于异步生成的项目很有用。从生成器生成后,它们不会暗示有关这些项目的任何内容。
推荐阅读
- python - 如何使用命令提示符为 python38-32 安装烧瓶
- javascript - 在 Jhipster 中使用旧的 Typescript Widgets 库
- image - 背景图像未以奇怪的方式显示在画布上
- mysql - MariaDB ROW_NUMBER 与 ORDER BY 未正确排序
- java - 在父构造函数中使用子属性
- javascript - 如何只接受带有土耳其字符的文本区域的字符?
- javascript - vuechartJs 使标签动态化
- python - 在 azure webjob 中导入 python 模块
- android - Webrtc android屏幕共享在realme,oppo等设备上崩溃
- javascript - 使用 JSZip 从 zip 中提取的文件返回纯文本文件