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);
阅读 5.5k
1 个回答

你的意思是 前一个promise完成才调用下一个?

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

你这里 都已经 全部一起调用了

顺序执行可以用reduce

 var array=[];
 var result = [];
function output(j) {
    j = j+1//使用前一个请求回来的数据
    return new Promise( function(resolve, reject) {
        setTimeout(function () {
            console.log('这里请求开始',j)
            return resolve(j);
        },1000 * j);
    }).then(function (res) {
        result.push(res);//每次请求返回数据 push进数组
        return Promise.resolve(res)
    });
}
for (var i=0;i<5;i++){
    array.push(output);//只是把方法push进数组 不调用
}

var lastPromise = array.reduce((p,v)=>p.then(v),Promise.resolve(0))//在这里顺序调用 
lastPromise.then(v=>{
  console.log(result)
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏