在所有承诺都被解决的前提下,异步迭代(
for-await-of
循环)是否比使用Promise.all
更快?根据异步迭代规范:
每次访问序列中的下一个值时,我们都会隐式地等待迭代器方法返回的承诺。
使用异步迭代:
let pages = [fetch('/echo/json/'), fetch('/echo/html/'), fetch('/echo/xml/')]
for await (let page of pages) {
console.log(page)
}
使用Promise.all
:
let pages = await Promise.all([fetch('/echo/json/'), fetch('/echo/html/'), fetch('/echo/xml/')])
pages.forEach(page => console.log(page))
两者都可以并行抓取页面,但我想知道异步迭代是否在所有页面抓取完成之前开始循环。我已经尝试通过浏览器开发工具来限制网络速度以模拟这种情况,但仍然无法感知到任何差异。