js map遍歷與promise一起使用會出現的問題,以及解決方案


開篇解釋一下async /await  與 Primise的關系

async/await是Promise的語法糖
所以這里我會直接使用async/await替換Promise

let result = await func()
// => 等價於
func().then(result => {
  // code here
})

// ======

async function func () {
  return 1  
}
// => 等價與
function func () {
  return new Promise(resolve => resolve(1))
}

 map

 map可以說是對Promise最友好的一個函數了。
   我們都知道,map接收兩個參數:

  1. 對每項元素執行的回調,回調結果的返回值將作為該數組中相應下標的元素
  2. 一個可選的回調函數this指向的參數

  日常工作中會有這么個場景

 

 

 

 這是map的一般使用場景,但是當我們的一些計算操作變為異步的:比如某個參數需要請求額外接口才能獲得

 

 

 

 這時候返回的就是由Promise組成的數組了

所以為什么會說map函數為最友好的了,Promise有個函數是Promise.all對不對,它會將由Promise組成的數組依次執行,並返回一個Promise對象,這時候結果集就出來了,那我們來試試

 

 

 

 用Promise.all包裝整個數組,然后await 獲取最終結果

最后附上代碼:

      let list = [];
      let array = [{ path: "1" }, { path: "2" }, { path: "3" }];
      list = await Promise.all(
        array.map(async (item) => {
          return {
            ...item,
            y_path: await this.getImage(item.path)
          };
        })
      );

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM