開篇解釋一下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
接收兩個參數:
- 對每項元素執行的回調,回調結果的返回值將作為該數組中相應下標的元素
- 一個可選的回調函數
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) }; }) );