解答:
首先定义一个可重复调用 Promise 的方法
function retry(){
var promise ;
promise = new Promise(function(resolve,reject){
var elapse = Math.random()*2000;
setTimeout(resolve, elapse);
});
return promise;
}
接下来对它调用10次
for (var i = 0; i < 10; i++){
retry().then(function(){
console.log(i);
})
}
查看输出结果:
10
10
10
10
10
10
10
10
10
10
不是我们期望的输出。
换一种调用方式:
var promiseArray = [];
for (var i=0; i<10; i++){
promiseArray.push(retry());
}
Promise.all(promiseArray).then(function(){
for(i=0; i<10; i++){
console.log(i);
}
})
输出结果:
0
1
2
3
4
5
6
7
8
9
ok,正是我们想要的 。
因为Promise.all函数可以并行调用参数中的Promise对象方法,并且将所有Promise对象方法返回值作为数组输入到then回调中,因此这种方式调用可以解决Promise的循环创建和调用。