Promise 异步(asynchronous )编程

时间:2023-03-09 05:32:26
Promise 异步(asynchronous )编程

概述

Promise.all(iterable) 方法返回一个promise,该promise会等iterable参数内的所有promise都被resolve后被resolve,或以第一个promise被reject的原因而reject 。

语法

Promise.all(iterable);
参数
iterable
一个可迭代对象,比如Array。参见iterable.

描述

结果是promise的一组值。如果传入的可迭代数组中某项不是一个promise,该项会被用Promise.resolve转换为一个promise。如果任一传入的promise被拒绝了,all Promise立刻带着该promise的拒绝原因进入拒绝(rejected)状态,不再理会其它传入的promise是否被解决。


  1. 属性
    1. Promise.prototype
  2. 方法
    1. Promise.all()
    2. Promise.prototype.catch()
    3. Promise.prototype.then()
    4. Promise.race()
    5. Promise.reject()
    6. Promise.resolve()

问题场景:异步调用时的循环问题可以用Promise.all()来解决这个问题

无限循环解决方法:

var func1 = function (callback) {
setTimeout(function () {
console.log('foo');
typeof (callback) !== 'function' || callback();
}, 499);
};

var promisify = function (func, index) {
return function () {
return new Promise(function

 (resolve) {
func(resolve,index);
});
}
}

for (var i = 0; i < 10; i++) { func_arr.push(promisify(func1,i)); } func_arr.reduce(function (cur, next) { return

 cur.then(next);
}, Promise.resolve(1)).then(function

(data) { console.log('job finished'

);
});

Promise 异步(asynchronous )编程


参考文献:

1-MDN JavaScript参考文档  Promise

2-Promise与遍历(循环,无穷多的then)遇到的问题及三个解决方案