猿问

Promise.all循环执行问题

setTimeout内需要放一个请求,如何让下次执行的时候是确保之前是有返回结果的

 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);


湖上湖
浏览 2453回答 1
1回答

烙印99

你的意思是 前一个promise完成才调用下一个?for&nbsp;(var&nbsp;i=0;i<5;i++){ &nbsp;&nbsp;&nbsp;&nbsp;array.push(output(i));}你这里 都已经 全部一起调用了顺序执行可以用reduce&nbsp;var&nbsp;array=[];&nbsp;var&nbsp;result&nbsp;=&nbsp;[];function&nbsp;output(j)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;j+1//使用前一个请求回来的数据 &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Promise(&nbsp;function(resolve,&nbsp;reject)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(function&nbsp;()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('这里请求开始',j)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;resolve(j); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},1000&nbsp;*&nbsp;j); &nbsp;&nbsp;&nbsp;&nbsp;}).then(function&nbsp;(res)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.push(res);//每次请求返回数据&nbsp;push进数组 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Promise.resolve(res) &nbsp;&nbsp;&nbsp;&nbsp;}); }for&nbsp;(var&nbsp;i=0;i<5;i++){ &nbsp;&nbsp;&nbsp;&nbsp;array.push(output);//只是把方法push进数组&nbsp;不调用}var&nbsp;lastPromise&nbsp;=&nbsp;array.reduce((p,v)=>p.then(v),Promise.resolve(0))//在这里顺序调用&nbsp;lastPromise.then(v=>{&nbsp;&nbsp;console.log(result) })
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答