UNPKG

1.22 kBJavaScriptView Raw
1function allSettled(arr) {
2 var P = this;
3 return new P(function(resolve, reject) {
4 if (!(arr && typeof arr.length !== 'undefined')) {
5 return reject(
6 new TypeError(
7 typeof arr +
8 ' ' +
9 arr +
10 ' is not iterable(cannot read property Symbol(Symbol.iterator))'
11 )
12 );
13 }
14 var args = Array.prototype.slice.call(arr);
15 if (args.length === 0) return resolve([]);
16 var remaining = args.length;
17
18 function res(i, val) {
19 if (val && (typeof val === 'object' || typeof val === 'function')) {
20 var then = val.then;
21 if (typeof then === 'function') {
22 then.call(
23 val,
24 function(val) {
25 res(i, val);
26 },
27 function(e) {
28 args[i] = { status: 'rejected', reason: e };
29 if (--remaining === 0) {
30 resolve(args);
31 }
32 }
33 );
34 return;
35 }
36 }
37 args[i] = { status: 'fulfilled', value: val };
38 if (--remaining === 0) {
39 resolve(args);
40 }
41 }
42
43 for (var i = 0; i < args.length; i++) {
44 res(i, args[i]);
45 }
46 });
47}
48
49export default allSettled;