for await of

异步迭代器(for-await-of):循环等待每个Promise对象变为resolved状态才进入下一步。

我们知道 for...of 是同步运行的,看如下代码

  function TimeOut(time) {
   return new Promise(function (resolve, reject) {
    setTimeout(function () {
     resolve(time)
    }, time)
   })
  }
  async function test() {
   let arr = [TimeOut(2000), TimeOut(1000), TimeOut(3000)]
   for (let item of arr) {
    console.log(Date.now(), item.then(console.log))
   }
  }
  test() 

上面打印结果如下图

图片

上述代码证实了 for of 方法不能遍历异步迭代器,得到的结果并不是我们所期待的,于是 for await of 就粉墨登场啦!

ES9 中可以用 for...await...of 的语法来操作

 function TimeOut(time) {
   return new Promise(function (resolve, reject) {
    setTimeout(function () {
     resolve(time)
    }, time)
   })
  }
  async function test() {
   let arr = [TimeOut(2000), TimeOut(1000), TimeOut(3000)]
   for await (let item of arr) {
    console.log(Date.now(), item)
   }
  }
  test() // 1560092345730 2000// 1560092345730 1000// 1560092346336 3000复制代码

for await of 环等待每个Promise对象变为resolved状态才进入下一步。所有打印的结果为 2000,1000,3000

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容