[英]Fix no-await-in-loop lint warning
我需要多次重复 async/await 块,但不能使用以下代码:
for (let i = 0; i <= 10; i += 1) {
const res = await DoSomething();
}
因为它与 no-await-in-loop 规则相矛盾。
Promise.all
如果您不介意代码乱序运行(意味着每次迭代的顺序无关紧要),只需使用Promise.all
:
const promises = [];
for (let i = 0; i <= 10; i += 1) {
promises.push(DoSomething());
}
const responses = await Promise.all(promises);
来自MDN :
Promise.all(iterable) 方法返回一个 Promise,当 iterable 参数中的所有承诺都已解决时,该 Promise 会解决
/* eslint-disable no-await-in-loop */
for (let i = 0; i <= 10; i += 1) {
const res = await DoSomething();
}
/* eslint-enable no-await-in-loop */
await
通常是非常低效的规则存在是有原因的。 在循环中使用await
很多情况都是浪费的,因为每次迭代都不依赖于前一次,但每次迭代甚至在尝试运行下一次之前都会等待前一次解决。
Promise.all
在这些情况下效率更高,因为它或多或少地以“并行”方式工作。
对可迭代对象的每个元素执行操作是一项常见任务。 但是,在每个操作中执行 await 表明程序没有充分利用 async/await 的并行化优势。
ES 9 为异步迭代添加了一个新功能。
for await (const line of readLines(filePath)) {
console.log(line);
}
你可以试试看。 希望它有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.