先看一个生成Promise对象的方法
function createPromise() {
var promise;
promise = new Promise(function(resolve, reject) {
var elapse = Math.random() * 2000;
setTimeout(resolve, elapse);
});
return promise;
}
目标是生成10个Promise对象并依次输出Promise的结果。
首先看这种调用方式:
for (var i = 0; i < 10; i++) {
createPromise().then(function() {
console.log(i);
})
}
由于Promise是异步调用,then内的回调函数在for循环之后调用,所以在所有的then callback里面,i=10。所以输出为
10
10
10
10
10
10
10
10
10
10
换另外一种调用方式
var promiseArray = [];
for (var i = 0; i < 10; i++) {
promiseArray.push(createPromise());
}
Promise.all(promiseArray).then(function() {
for (i = 0; i < data.length; i++)
console.log(i);
})
因为Promise.all函数可以并行调用参数中的Promise对象方法,并且将所有Promise对象方法返回值作为数组输入到then回调中,因此这种方式调用可以解决Promise的循环创建和调用。
网友评论