1 | function 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 |
|
49 | export default allSettled;
|