在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 異步操作的問題

異步操作的問題

在一個函數中 for循環(huán) 發(fā)送了多個請求, 怎么等到請求全部返還時執(zhí)行下一個函數,因為下一個函數要使用返還值。

回答
編輯回答
冷溫柔

1.如樓上所述,創(chuàng)建一個保存結果狀態(tài)的數組,且假設你要循環(huán)的ajax數量為ajax_count
var result = [];
2.聲明一個ajax的回調函數,該函數會根據result數組的狀態(tài)來執(zhí)行另一個函數(就是在ajax全部執(zhí)行完成后需要執(zhí)行的內容)
function on_all_ajax_finished()
{

console.log("所有ajax執(zhí)行完畢!");

}

function ajax_callback()
{

if(result.length == ajax_count -1)
{
    on_all_ajax_finished();
}
else
{
    result.push(1);//push一個任意的內容到數組來增加數組的長度,不知道js有沒有線程安全問題
}

}

2017年2月13日 14:10
編輯回答
哎呦喂

for中將每個請求放到一個promise中,然后把這個promise push到一個數組中,最后使用 let result = await Promise.all(promise數組);, result包含了所有的返回值。

2017年6月26日 10:20
編輯回答
怣痛

如果是vue項目的話,有些異步問題是可以用watch監(jiān)聽來解決的

2018年7月28日 23:22
編輯回答
離殤

最簡單的方式就是1樓說的那樣,用async+await 結合Promise.all來實現,我提供另外一個比較原始的方法給你參考下。
另外用一個新數組緩存請求結果,異步拿到結果后保存到數組,當緩存數組長度與請求長度一致時,就說明請求已經全部返回可以執(zhí)行下一步了

const result = [];
const request = [1, 2, 3, 4, 5];
request.forEach(id => {
  axios.get(`/user?ID=${id}`).then(res => {
    result.push(res);
    if (result.length === request.length){
      //請求已全部返還,執(zhí)行下一個函數
    } 
  })
})
2017年9月6日 02:49