鍍金池/ 問答/HTML/ Promise.all循環(huán)執(zhí)行問題

Promise.all循環(huán)執(zhí)行問題

setTimeout內(nèi)需要放一個請求,如何讓下次執(zhí)行的時候是確保之前是有返回結(jié)果的

 var array=[];
    function output(j) {
        return new Promise( function(resolve, reject) {
            setTimeout(function () {
                console.log('這里請求開始',j)
                return resolve(j);
            },1000 * j);
        }).then(function (res) {
            return Promise.resolve(res)
        });
    }

    for (var i=0;i<5;i++){
        array.push(output(i));
    }
    Promise.all(array).then(function (res) {
        console.log('res',res);
回答
編輯回答
嘟尛嘴

你的意思是 前一個promise完成才調(diào)用下一個?

for (var i=0;i<5;i++){
    array.push(output(i));
}

你這里 都已經(jīng) 全部一起調(diào)用了

順序執(zhí)行可以用reduce

 var array=[];
 var result = [];
function output(j) {
    j = j+1//使用前一個請求回來的數(shù)據(jù)
    return new Promise( function(resolve, reject) {
        setTimeout(function () {
            console.log('這里請求開始',j)
            return resolve(j);
        },1000 * j);
    }).then(function (res) {
        result.push(res);//每次請求返回?cái)?shù)據(jù) push進(jìn)數(shù)組
        return Promise.resolve(res)
    });
}
for (var i=0;i<5;i++){
    array.push(output);//只是把方法push進(jìn)數(shù)組 不調(diào)用
}

var lastPromise = array.reduce((p,v)=>p.then(v),Promise.resolve(0))//在這里順序調(diào)用 
lastPromise.then(v=>{
  console.log(result)
})
2018年5月16日 20:45