ES8关于使用异步迭代器请求数据

 
async/await的某些时刻,你可能尝试在同步循环中调用异步函数。例如:
async function process(array) {
  for (let i of array) {
    await doSomething(i);
  }
}

这段代码不会正常运行,下面这段同样不会运行:

async function process(array) {
  array.forEach(async i => {
    await doSomething(i);
  });
}

这段代码中,循环本身依旧保持同步,并在在内部异步函数之前全部调用完成。(这也是问题所在)

 
ES2018引入异步迭代器(asynchronous iterators), 这就行常规迭代器,除了next()方法返回一个Promise。因此await可以和for...of循环一起使用,以串行的方式运行异步操作。例如:
async function process(array) {
  for await (let i of array) {
    doSomething(i);
  }
}

除此之外还有一种借助Promise.all实现的在数组的map方法中请求异步函数

let result=await Promise.all(dataComments.map(async (ele)=>{
    return (async ()=>{
        let resData= await articleApi.getOneArticle(ele.article_id);
        let titleData=resData.data;
        ele.title=titleData.title
        console.log("111")
        return ele;
    })()
}))

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章