学习链接
Promise.any

AggregateError 构造函数
AggregateError(errors[, message])
- errors:数组,它的每个成员都是一个错误对象。该参数是必须的。
- message:字符串,表示 AggregateError 抛出时的提示信息。该参数是可选的。
AggregateError 的实例对象有三个属性。
- name:错误名称,默认为“AggregateError”。
- message:错误的提示信息。
- errors:数组,每个成员都是一个错误对象。
Promise.myAny = promiseArr => {return new Promise((resolve, reject) => {if (!promiseArr[Symbol.iterator]) {throw new TypeError(`${promiseArr}is not iterable`);}if (!Array.isArray(promiseArr)) {promiseArr = Array.from(promiseArr);}const result = [];let count = 0;promiseArr.forEach((p, i) => {Promise.resolve(p).then(value => {resolve(value);},reason => {count++;result[i] = reason;if (count === promiseArr.length) {reject(new AggregateError(result, 'All Promises were rejected'));}})});})}
测试
iterator 相关测试案例见这里
const resolved = Promise.resolve(42);const rejected = Promise.reject(-1);const alsoRejected = Promise.reject(Infinity);Promise.any([resolved, rejected, alsoRejected]).then((result) => console.log(result)); // 42Promise.any([rejected, alsoRejected]).catch( reason => {console.log(reason); // AggregateError: All promises were rejectedconsole.log(reason.name); // AggregateErrorconsole.log(reason.message); // All promises were rejectedconsole.log(reason.errors); // [-1, Infinity]});Promise.myAny([resolved, rejected, alsoRejected]).then((result) => console.log(result));Promise.myAny([rejected, alsoRejected]).catch( reason => {console.log(reason);console.log(reason.name);console.log(reason.message);console.log(reason.errors);});
