5 回答

TA貢獻1866條經驗 獲得超5個贊
簡單粗暴:監聽一段時間(自定義,如20秒)
//兩個請求是否完成的狀態,在每個請求里面回填這個狀態,改成1
var wait = 20, result = { ajax1: 0, ajax2: 0 };
var siFlag = setInterval(function () {
wait--;
if (wait < 1) {
clearInterval(siFlag);
}
var isComplete = true;
for (var i in result) {
if (!result[i]) {
isComplete = false;
break;
}
}
console.log(wait);
//都完成時
if (isComplete) {
console.log("isComplete TODO");
}
}, 1000);
//直接拷貝到控制臺執行,能看效果,運行的過程中,嘗試改變result對象兩個屬性的值

TA貢獻1846條經驗 獲得超7個贊
用Promise并行吧,幾個異步事件一起執行,一起拿到結果,最后完成那個完成了,才獲取所有的異步返回值(集合)
var a = function(){
return new Promise(function(resolve, reject){
setTimeout(function(){
resolve('a');
},2000);
})
}
var b = function(){
return new Promise(function(resolve, reject){
setTimeout(function(){
resolve('b');
},1000);
})
}
var c = function(){
return new Promise(function(resolve, reject){
setTimeout(function(){
resolve('c');
},3000);
})
}
Promise.all([a(),b(),c()]).then(function(val){
console.log(val);
})
你如果是只要有請求完成就行,那么用競速,最先完成的完成了就執行,返回最先完成的那個異步的值
Promise.race([a(),b(),c()]).then(function(val){
console.log(val);
})
添加回答
舉報