Update upstream source from tag 'upstream/8.2.0'
Update to upstream version '8.2.0'
with Debian dir 9a5c59216b60cb418a2e4bd599e0dd10896a9211
Yadd
1 year, 7 months ago
0 | # These are supported funding model platforms | |
1 | ||
2 | github: [ForbesLindesay]# Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] | |
3 | patreon: # Replace with a single Patreon username | |
4 | open_collective: # Replace with a single Open Collective username | |
5 | ko_fi: # Replace with a single Ko-fi username | |
6 | tidelift: npm/promise # Replace with a single Tidelift platform-name/package-name e.g., npm/babel | |
7 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry | |
8 | liberapay: # Replace with a single Liberapay username | |
9 | issuehunt: # Replace with a single IssueHunt username | |
10 | otechie: # Replace with a single Otechie username | |
11 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] |
0 | components | |
1 | build | |
2 | node_modules | |
3 | /lib | |
4 | /domains | |
5 | /setimmediate | |
6 | coverage | |
7 | package-lock.json⏎ |
0 | language: node_js | |
1 | sudo: false | |
2 | ||
3 | node_js: | |
4 | - "8" | |
5 | - "10" | |
6 | - "12" | |
7 | ||
8 | after_success: | |
9 | - npm run coverage | |
10 | - npm i coveralls | |
11 | - cat ./coverage/lcov.info | coveralls |
6 | 6 | |
7 | 7 | **N.B.** This promise exposes internals via underscore (`_`) prefixed properties. If you use these, your code will break with each new release. |
8 | 8 | |
9 | [![travis][travis-image]][travis-url] | |
10 | [![dep][dep-image]][dep-url] | |
11 | [![npm][npm-image]][npm-url] | |
12 | [![downloads][downloads-image]][downloads-url] | |
13 | ||
14 | [travis-image]: https://img.shields.io/travis/then/promise.svg?style=flat | |
15 | [travis-url]: https://travis-ci.org/then/promise | |
16 | [dep-image]: https://img.shields.io/david/then/promise.svg?style=flat | |
17 | [dep-url]: https://david-dm.org/then/promise | |
18 | [npm-image]: https://img.shields.io/npm/v/promise.svg?style=flat | |
19 | [npm-url]: https://npmjs.org/package/promise | |
20 | [downloads-image]: https://img.shields.io/npm/dm/promise.svg?style=flat | |
21 | [downloads-url]: https://npmjs.org/package/promise | |
9 | [![Build Status](https://img.shields.io/github/workflow/status/then/promise/Publish%20Canary/master?style=for-the-badge)](https://github.com/then/promise/actions?query=workflow%3APublish%20Canary+branch%3Amaster) | |
10 | [![Rolling Versions](https://img.shields.io/badge/Rolling%20Versions-Enabled-brightgreen?style=for-the-badge)](https://rollingversions.com/then/promise) | |
11 | [![NPM version](https://img.shields.io/npm/v/promise?style=for-the-badge)](https://www.npmjs.com/package/promise) | |
12 | [![Downloads](https://img.shields.io/npm/dm/promise.svg?style=for-the-badge)](https://www.npmjs.org/package/promise) | |
22 | 13 | |
23 | 14 | ## Installation |
24 | 15 | |
149 | 140 | }) |
150 | 141 | ``` |
151 | 142 | |
143 | #### Promise.allSettled(array) | |
144 | ||
145 | Returns a promise that resolves after all of the given promises have either fulfilled or rejected, with an array of objects that each describes the outcome of each promise. | |
146 | ||
147 | ```js | |
148 | Promise.allSettled([Promise.resolve('a'), Promise.reject('error'), Promise.resolve('c')]) | |
149 | .then(function (res) { | |
150 | res[0] // { status: "fulfilled", value: 'a' } | |
151 | res[1] // { status: "rejected", reason: 'error' } | |
152 | res[2] // { status: "fulfilled", value: 'c' } | |
153 | }) | |
154 | ``` | |
155 | ||
152 | 156 | #### Promise.race(array) |
153 | 157 | |
154 | 158 | Returns a promise that resolves or rejects with the result of the first promise to resolve/reject, e.g. |
33 | 33 | nodeify(callback: (err: Error, value: T) => void): void; |
34 | 34 | } |
35 | 35 | |
36 | interface PromiseFulfilledResult<T> { | |
37 | status: "fulfilled"; | |
38 | value: T; | |
39 | } | |
40 | ||
41 | interface PromiseRejectedResult { | |
42 | status: "rejected"; | |
43 | reason: any; | |
44 | } | |
45 | ||
46 | type PromiseSettledResult<T> = PromiseFulfilledResult<T> | PromiseRejectedResult; | |
47 | ||
36 | 48 | interface ThenPromiseConstructor { |
37 | 49 | /** |
38 | 50 | * A reference to the prototype. |
48 | 60 | new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => any): ThenPromise<T>; |
49 | 61 | |
50 | 62 | /** |
63 | * Creates a Promise that is resolved with an array of results when all | |
64 | * of the provided Promises resolve or reject. | |
65 | * @param values An array of Promises. | |
66 | * @returns A new Promise. | |
67 | */ | |
68 | allSettled<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>, T10 | PromiseLike<T10>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>, PromiseSettledResult<T6>, PromiseSettledResult<T7>, PromiseSettledResult<T8>, PromiseSettledResult<T9>, PromiseSettledResult<T10>]>; | |
69 | ||
70 | /** | |
71 | * Creates a Promise that is resolved with an array of results when all | |
72 | * of the provided Promises resolve or reject. | |
73 | * @param values An array of Promises. | |
74 | * @returns A new Promise. | |
75 | */ | |
76 | allSettled<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>, PromiseSettledResult<T6>, PromiseSettledResult<T7>, PromiseSettledResult<T8>, PromiseSettledResult<T9>]>; | |
77 | ||
78 | /** | |
79 | * Creates a Promise that is resolved with an array of results when all | |
80 | * of the provided Promises resolve or reject. | |
81 | * @param values An array of Promises. | |
82 | * @returns A new Promise. | |
83 | */ | |
84 | allSettled<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>, PromiseSettledResult<T6>, PromiseSettledResult<T7>, PromiseSettledResult<T8>]>; | |
85 | ||
86 | /** | |
87 | * Creates a Promise that is resolved with an array of results when all | |
88 | * of the provided Promises resolve or reject. | |
89 | * @param values An array of Promises. | |
90 | * @returns A new Promise. | |
91 | */ | |
92 | allSettled<T1, T2, T3, T4, T5, T6, T7>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>, PromiseSettledResult<T6>, PromiseSettledResult<T7>]>; | |
93 | ||
94 | /** | |
95 | * Creates a Promise that is resolved with an array of results when all | |
96 | * of the provided Promises resolve or reject. | |
97 | * @param values An array of Promises. | |
98 | * @returns A new Promise. | |
99 | */ | |
100 | allSettled<T1, T2, T3, T4, T5, T6>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>, PromiseSettledResult<T6>]>; | |
101 | ||
102 | /** | |
103 | * Creates a Promise that is resolved with an array of results when all | |
104 | * of the provided Promises resolve or reject. | |
105 | * @param values An array of Promises. | |
106 | * @returns A new Promise. | |
107 | */ | |
108 | allSettled<T1, T2, T3, T4, T5>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>, PromiseSettledResult<T5>]>; | |
109 | ||
110 | /** | |
111 | * Creates a Promise that is resolved with an array of results when all | |
112 | * of the provided Promises resolve or reject. | |
113 | * @param values An array of Promises. | |
114 | * @returns A new Promise. | |
115 | */ | |
116 | allSettled<T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>, PromiseSettledResult<T4>]>; | |
117 | ||
118 | /** | |
119 | * Creates a Promise that is resolved with an array of results when all | |
120 | * of the provided Promises resolve or reject. | |
121 | * @param values An array of Promises. | |
122 | * @returns A new Promise. | |
123 | */ | |
124 | allSettled<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>, PromiseSettledResult<T3>]>; | |
125 | ||
126 | /** | |
127 | * Creates a Promise that is resolved with an array of results when all | |
128 | * of the provided Promises resolve or reject. | |
129 | * @param values An array of Promises. | |
130 | * @returns A new Promise. | |
131 | */ | |
132 | allSettled<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): ThenPromise<[PromiseSettledResult<T1>, PromiseSettledResult<T2>]>; | |
133 | ||
134 | /** | |
135 | * Creates a Promise that is resolved with an array of results when all | |
136 | * of the provided Promises resolve or reject. | |
137 | * @param values An array of Promises. | |
138 | * @returns A new Promise. | |
139 | */ | |
140 | allSettled<T>(values: (T | PromiseLike<T>)[]): ThenPromise<PromiseSettledResult<T>[]>; | |
141 | ||
142 | /** | |
51 | 143 | * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises |
52 | 144 | * resolve, or rejected when any ThenPromise is rejected. |
53 | 145 | * @param values An array of Promises. |
242 | 334 | |
243 | 335 | declare var ThenPromise: ThenPromiseConstructor; |
244 | 336 | |
245 | export = ThenPromise;⏎ | |
337 | export = ThenPromise; |
3 | 3 | "description": "Bare bones Promises/A+ implementation", |
4 | 4 | "main": "index.js", |
5 | 5 | "scripts": { |
6 | "prepublish": "node build", | |
6 | "build": "node build", | |
7 | 7 | "pretest": "node build", |
8 | 8 | "pretest-resolve": "node build", |
9 | 9 | "pretest-extensions": "node build", |
97 | 97 | }); |
98 | 98 | }; |
99 | 99 | |
100 | function onSettledFulfill(value) { | |
101 | return { status: 'fulfilled', value: value }; | |
102 | } | |
103 | function onSettledReject(reason) { | |
104 | return { status: 'rejected', reason: reason }; | |
105 | } | |
106 | function mapAllSettled(item) { | |
107 | if(item && (typeof item === 'object' || typeof item === 'function')){ | |
108 | if(item instanceof Promise && item.then === Promise.prototype.then){ | |
109 | return item.then(onSettledFulfill, onSettledReject); | |
110 | } | |
111 | var then = item.then; | |
112 | if (typeof then === 'function') { | |
113 | return new Promise(then.bind(item)).then(onSettledFulfill, onSettledReject) | |
114 | } | |
115 | } | |
116 | ||
117 | return onSettledFulfill(item); | |
118 | } | |
119 | Promise.allSettled = function (iterable) { | |
120 | return Promise.all(iterableToArray(iterable).map(mapAllSettled)); | |
121 | }; | |
122 | ||
100 | 123 | Promise.reject = function (value) { |
101 | 124 | return new Promise(function (resolve, reject) { |
102 | 125 | reject(value); |
3 | 3 | var promise = new Promise(function (resolve) { |
4 | 4 | resolve(sentinel) |
5 | 5 | }) |
6 | var thenable = {then: function (fullfilled, rejected) { fullfilled(sentinel) }} | |
7 | var thenableRejected = {then: function (fullfilled, rejected) { rejected(sentinel) }} | |
6 | var thenable = {then: function (fulfilled, rejected) { fulfilled(sentinel) }} | |
7 | var thenableRejected = {then: function (fulfilled, rejected) { rejected(sentinel) }} | |
8 | 8 | |
9 | 9 | var a = {} |
10 | 10 | var b = {} |
127 | 127 | assert(this === ctx) |
128 | 128 | done() |
129 | 129 | }) |
130 | }) | |
131 | }) | |
132 | describe('Promise.allSettled(...)', function () { | |
133 | describe('an array', function () { | |
134 | describe('that is empty', function () { | |
135 | it('returns a promise for an empty array', function (done) { | |
136 | var res = Promise.allSettled([]) | |
137 | assert(res instanceof Promise) | |
138 | res.then(function (res) { | |
139 | assert(Array.isArray(res)) | |
140 | assert(res.length === 0) | |
141 | }) | |
142 | .nodeify(done) | |
143 | }) | |
144 | }) | |
145 | describe('of objects', function () { | |
146 | it('returns a promise for the array', function (done) { | |
147 | var res = Promise.allSettled([a, b, c]) | |
148 | assert(res instanceof Promise) | |
149 | res.then(function (res) { | |
150 | assert(Array.isArray(res)) | |
151 | assert(res[0].status === "fulfilled") | |
152 | assert(res[0].value === a) | |
153 | assert(res[1].status === "fulfilled") | |
154 | assert(res[1].value === b) | |
155 | assert(res[2].status === "fulfilled") | |
156 | assert(res[2].value === c) | |
157 | }) | |
158 | .nodeify(done) | |
159 | }) | |
160 | }) | |
161 | describe('of promises', function () { | |
162 | it('returns a promise for an array containing the fulfilled values', function (done) { | |
163 | var d = {} | |
164 | var resolveD | |
165 | var res = Promise.allSettled([A, B, C, new Promise(function (resolve) { resolveD = resolve })]) | |
166 | assert(res instanceof Promise) | |
167 | res.then(function (res) { | |
168 | assert(Array.isArray(res)) | |
169 | assert(res[0].status === "fulfilled") | |
170 | assert(res[0].value === a) | |
171 | assert(res[1].status === "fulfilled") | |
172 | assert(res[1].value === b) | |
173 | assert(res[2].status === "fulfilled") | |
174 | assert(res[2].value === c) | |
175 | assert(res[3].status === "fulfilled") | |
176 | assert(res[3].value === d) | |
177 | }) | |
178 | .nodeify(done) | |
179 | resolveD(d) | |
180 | }) | |
181 | }) | |
182 | describe('of mixed values', function () { | |
183 | it('returns a promise for an array containing the fulfilled values', function (done) { | |
184 | var res = Promise.allSettled([A, b, C]) | |
185 | assert(res instanceof Promise) | |
186 | res.then(function (res) { | |
187 | assert(Array.isArray(res)) | |
188 | assert(res[0].status === "fulfilled") | |
189 | assert(res[0].value === a) | |
190 | assert(res[1].status === "fulfilled") | |
191 | assert(res[1].value === b) | |
192 | assert(res[2].status === "fulfilled") | |
193 | assert(res[2].value === c) | |
194 | }) | |
195 | .nodeify(done) | |
196 | }) | |
197 | }) | |
198 | describe('containing at least one rejected promise', function () { | |
199 | it('should not rejects the resulting promise', function (done) { | |
200 | var res = Promise.allSettled([A, rejected, C]) | |
201 | assert(res instanceof Promise) | |
202 | res.then(function (res) { | |
203 | assert(Array.isArray(res)) | |
204 | assert(res[0].status === "fulfilled") | |
205 | assert(res[0].value === a) | |
206 | assert(res[1].status === "rejected") | |
207 | assert(res[1].reason === rejection) | |
208 | assert(res[2].status === "fulfilled") | |
209 | assert(res[2].value === c) | |
210 | }) | |
211 | .nodeify(done) | |
212 | }) | |
213 | }) | |
214 | describe('containing at least one eventually rejected promise', function () { | |
215 | it('rejects the resulting promise', function (done) { | |
216 | var rejectB | |
217 | var rejected = new Promise(function (resolve, reject) { rejectB = reject }) | |
218 | var res = Promise.allSettled([A, rejected, C]) | |
219 | assert(res instanceof Promise) | |
220 | res.then(function (res) { | |
221 | assert(Array.isArray(res)) | |
222 | assert(res[0].status === "fulfilled") | |
223 | assert(res[0].value === a) | |
224 | assert(res[1].status === "rejected") | |
225 | assert(res[1].reason === rejection) | |
226 | assert(res[2].status === "fulfilled") | |
227 | assert(res[2].value === c) | |
228 | }) | |
229 | .nodeify(done) | |
230 | rejectB(rejection) | |
231 | }) | |
232 | }) | |
233 | describe('with a promise that resolves twice', function () { | |
234 | it('still waits for all the other promises', function (done) { | |
235 | var a = 1; | |
236 | var fakePromise = {then: function (onFulfilled) { onFulfilled(a); onFulfilled(2) }} | |
237 | var eventuallyRejected = {then: function (_, onRejected) { this.onRejected = onRejected }} | |
238 | var res = Promise.allSettled([fakePromise, eventuallyRejected]) | |
239 | assert(res instanceof Promise) | |
240 | res.then(function (res) { | |
241 | assert(Array.isArray(res)) | |
242 | assert(res[0].status === "fulfilled") | |
243 | assert(res[0].value === a) | |
244 | assert(res[1].status === "rejected") | |
245 | assert(res[1].reason === rejection) | |
246 | }) | |
247 | .nodeify(done) | |
248 | eventuallyRejected.onRejected(rejection); | |
249 | }) | |
250 | }) | |
251 | describe('when given a foreign promise', function () { | |
252 | it('should provide the correct value of `this`', function (done) { | |
253 | var p = {then: function (onFulfilled) { onFulfilled({self: this}); }}; | |
254 | Promise.allSettled([p]).then(function (results) { | |
255 | assert(p === results[0].value.self); | |
256 | }).nodeify(done); | |
257 | }); | |
258 | }); | |
259 | }) | |
260 | describe('a Set', function () { | |
261 | describe('that is empty', function () { | |
262 | it('returns a promise for an empty array', function (done) { | |
263 | var res = Promise.allSettled(new Set([])) | |
264 | assert(res instanceof Promise) | |
265 | res.then(function (res) { | |
266 | assert(Array.isArray(res)) | |
267 | assert(res.length === 0) | |
268 | }) | |
269 | .nodeify(done) | |
270 | }) | |
271 | }) | |
272 | describe('of objects', function () { | |
273 | it('returns a promise for the array', function (done) { | |
274 | var res = Promise.allSettled(new Set([a, b, c])) | |
275 | assert(res instanceof Promise) | |
276 | res.then(function (res) { | |
277 | assert(Array.isArray(res)) | |
278 | assert(res[0].status === "fulfilled") | |
279 | assert(res[0].value === a) | |
280 | assert(res[1].status === "fulfilled") | |
281 | assert(res[1].value === b) | |
282 | assert(res[2].status === "fulfilled") | |
283 | assert(res[2].value === c) | |
284 | }) | |
285 | .nodeify(done) | |
286 | }) | |
287 | }) | |
288 | describe('of promises', function () { | |
289 | it('returns a promise for an array containing the fulfilled values', function (done) { | |
290 | var d = {} | |
291 | var resolveD | |
292 | var res = Promise.allSettled(new Set([A, B, C, new Promise(function (resolve) { resolveD = resolve })])) | |
293 | assert(res instanceof Promise) | |
294 | res.then(function (res) { | |
295 | assert(Array.isArray(res)) | |
296 | assert(res[0].status === "fulfilled") | |
297 | assert(res[0].value === a) | |
298 | assert(res[1].status === "fulfilled") | |
299 | assert(res[1].value === b) | |
300 | assert(res[2].status === "fulfilled") | |
301 | assert(res[2].value === c) | |
302 | assert(res[3].status === "fulfilled") | |
303 | assert(res[3].value === d) | |
304 | }) | |
305 | .nodeify(done) | |
306 | resolveD(d) | |
307 | }) | |
308 | }) | |
309 | describe('of mixed values', function () { | |
310 | it('returns a promise for an array containing the fulfilled values', function (done) { | |
311 | var res = Promise.allSettled(new Set([A, b, C])) | |
312 | assert(res instanceof Promise) | |
313 | res.then(function (res) { | |
314 | assert(Array.isArray(res)) | |
315 | assert(res[0].status === "fulfilled") | |
316 | assert(res[0].value === a) | |
317 | assert(res[1].status === "fulfilled") | |
318 | assert(res[1].value === b) | |
319 | assert(res[2].status === "fulfilled") | |
320 | assert(res[2].value === c) | |
321 | }) | |
322 | .nodeify(done) | |
323 | }) | |
324 | }) | |
325 | describe('containing at least one rejected promise', function () { | |
326 | it('rejects the resulting promise', function (done) { | |
327 | var res = Promise.allSettled(new Set([A, rejected, C])) | |
328 | assert(res instanceof Promise) | |
329 | res.then(function (res) { | |
330 | assert(Array.isArray(res)) | |
331 | assert(res[0].status === "fulfilled") | |
332 | assert(res[0].value === a) | |
333 | assert(res[1].status === "rejected") | |
334 | assert(res[1].reason === rejection) | |
335 | assert(res[2].status === "fulfilled") | |
336 | assert(res[2].value === c) | |
337 | }) | |
338 | .nodeify(done) | |
339 | }) | |
340 | }) | |
341 | describe('containing at least one eventually rejected promise', function () { | |
342 | it('rejects the resulting promise', function (done) { | |
343 | var rejectB | |
344 | var rejected = new Promise(function (resolve, reject) { rejectB = reject }) | |
345 | var res = Promise.allSettled(new Set([A, rejected, C])) | |
346 | assert(res instanceof Promise) | |
347 | res.then(function (res) { | |
348 | assert(Array.isArray(res)) | |
349 | assert(res[0].status === "fulfilled") | |
350 | assert(res[0].value === a) | |
351 | assert(res[1].status === "rejected") | |
352 | assert(res[1].reason === rejection) | |
353 | assert(res[2].status === "fulfilled") | |
354 | assert(res[2].value === c) | |
355 | }) | |
356 | .nodeify(done) | |
357 | rejectB(rejection) | |
358 | }) | |
359 | }) | |
360 | describe('with a promise that resolves twice', function () { | |
361 | it('still waits for all the other promises', function (done) { | |
362 | var a = 1 | |
363 | var fakePromise = {then: function (onFulfilled) { onFulfilled(a); onFulfilled(2) }} | |
364 | var eventuallyRejected = {then: function (_, onRejected) { this.onRejected = onRejected }} | |
365 | var res = Promise.allSettled(new Set([fakePromise, eventuallyRejected])) | |
366 | assert(res instanceof Promise) | |
367 | res.then(function (res) { | |
368 | assert(Array.isArray(res)) | |
369 | assert(res[0].status === "fulfilled") | |
370 | assert(res[0].value === a) | |
371 | assert(res[1].status === "rejected") | |
372 | assert(res[1].reason === rejection) | |
373 | }) | |
374 | .nodeify(done) | |
375 | eventuallyRejected.onRejected(rejection); | |
376 | }) | |
377 | }) | |
378 | describe('when given a foreign promise', function () { | |
379 | it('should provide the correct value of `this`', function (done) { | |
380 | var p = {then: function (onFulfilled) { onFulfilled({self: this}); }}; | |
381 | Promise.allSettled(new Set([p])).then(function (results) { | |
382 | assert(p === results[0].value.self); | |
383 | }).nodeify(done); | |
384 | }); | |
385 | }); | |
130 | 386 | }) |
131 | 387 | }) |
132 | 388 | describe('Promise.all(...)', function () { |
3 | 3 | var Promise = require('../'); |
4 | 4 | |
5 | 5 | describe('nested promises', function () { |
6 | it('does not result in any wierd behaviour - 1', function (done) { | |
6 | it('does not result in any weird behaviour - 1', function (done) { | |
7 | 7 | var resolveA, resolveB, resolveC; |
8 | 8 | var A = new Promise(function (resolve, reject) { |
9 | 9 | resolveA = resolve; |
22 | 22 | done(); |
23 | 23 | }); |
24 | 24 | }); |
25 | it('does not result in any wierd behaviour - 2', function (done) { | |
25 | it('does not result in any weird behaviour - 2', function (done) { | |
26 | 26 | var resolveA, resolveB, resolveC, resolveD; |
27 | 27 | var A = new Promise(function (resolve, reject) { |
28 | 28 | resolveA = resolve; |
46 | 46 | done(); |
47 | 47 | }); |
48 | 48 | }); |
49 | it('does not result in any wierd behaviour - 2', function (done) { | |
49 | it('does not result in any weird behaviour - 2', function (done) { | |
50 | 50 | var promises = []; |
51 | 51 | var resolveFns = []; |
52 | 52 | for (var i = 0; i < 100; i++) { |