場景:對乙個物件或者陣列遍歷,其中乙個值滿足條件時請求介面,得到資料後進行後續**操作
1.foreach**函式直接結合async await使用,並不能將迴圈中的非同步請求轉為同步,得不到正常結果
object.keys(propsaccountinfo).foreach(async (v) =>});
2.改用for迴圈,能正常得到結果
for (let i = 0; i < object.keys(propsaccountinfo).length; i++) }//上面**非同步請求介面以後再帶入資料
object.keys(propsaccountinfo).foreach((v) =>);
原因分析:
for:
const report = async () =>};
foreach
const report = async () =>);};//
相當於:
const report = async () =>;
for (let i = 0, len = arr.length; i < len; i++)
};
第乙個for迴圈的 asyncfn 要await返回後才繼續執行,所以是順序執行,而第二個的 asyncfnwrap 不會阻塞迴圈。
實際上還是foreach內部實現不支援await的問題:
array.prototype.foreach = function(callback)
}
擴充套件一下
array.prototype.foreachasync = async function(fn)
}array.prototype.foreachasyncparallel = async function
(fn)
async await結合axios使用
async 和 await是es7的語法 async和await必須結合使用,有await必須要使用async,有async不一定要使用await,await是將非同步轉為同步 用async修飾的事件,如果有retrun返回,則返回的是promise物件 async修飾的非同步事件a,在其他方法b中...
async await,實現同步
作為一名初學者,對於 而言,自然是對比於之前學過的知識,這樣才能判斷意義 對於promise了解不深入,但也稍微記錄,加深自我的印象。作為新特性來說,功能必然更好,就對比之前ajax來說,promise能夠將非同步轉為同步。如 async function ajaxtest url return n...
使用async await 總結
async await 迴圈並行處理 同步 同一執行緒之中,順序完成不同的操作,是一種阻塞模式 後乙個請求操作需要等待前乙個操作完成之後,才能發出。非同步 需要開啟不同的執行緒,是非阻塞模式。同步類似於打 而非同步相當於發簡訊。傳送請求獲取天氣非同步操作,利用node fetch完成請求 const...