Promise 能像下面这样顺序完成链式异步任务
promise1().then(function(data) {
console.log(data);
return promise2();
})
.then(function(data) {
console.log(data);
return promise3();
})
.then(function(data) {
console.log(data);
return '结束了吧'
}).then(function(data) {
console.log(data);
});
}
但是这里存在一个问题, promise2 和 promise3 都必须是在外部预定义好的。
但是现在我有这么一个需求,我可能有一大批 promise 对象,这些 promise 对象都是按一定算法用循环生成的。结果这就遇到了坑,我试图这么干
function axiosLoop(index) {
/*
XXXXXX
*/
return axiosObj;
}
var objTemp = null;
for (var i = 0; i < 10; i++) {
objTemp = axiosLoop(i).then(function (data) {
console.log(data);
return axiosLoop(i+1); //这么干是不行的,因为这个 i 值是引用外部的 i ,它会直接演变成最大的 10
}).catch(function (error) {
console.log(error);
});
}
=========
我该怎么解决这个问题,这个问题不能使用类似 promis.all()来执行,因为我一定要保证有序执行
promise1().then(function(data) {
console.log(data);
return promise2();
})
.then(function(data) {
console.log(data);
return promise3();
})
.then(function(data) {
console.log(data);
return '结束了吧'
}).then(function(data) {
console.log(data);
});
}
但是这里存在一个问题, promise2 和 promise3 都必须是在外部预定义好的。
但是现在我有这么一个需求,我可能有一大批 promise 对象,这些 promise 对象都是按一定算法用循环生成的。结果这就遇到了坑,我试图这么干
function axiosLoop(index) {
/*
XXXXXX
*/
return axiosObj;
}
var objTemp = null;
for (var i = 0; i < 10; i++) {
objTemp = axiosLoop(i).then(function (data) {
console.log(data);
return axiosLoop(i+1); //这么干是不行的,因为这个 i 值是引用外部的 i ,它会直接演变成最大的 10
}).catch(function (error) {
console.log(error);
});
}
=========
我该怎么解决这个问题,这个问题不能使用类似 promis.all()来执行,因为我一定要保证有序执行