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;
    })()
}))

 

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