Codebase list node-promise / cb1f5c7
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
11 changed file(s) with 396 addition(s) and 54 deletion(s). Raw diff Collapse all Expand all
+0
-12
.github/FUNDING.yml less more
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
-8
.gitignore less more
0 components
1 build
2 node_modules
3 /lib
4 /domains
5 /setimmediate
6 coverage
7 package-lock.json
11 node_modules
22 test
33 .gitignore
4 .travis.yml
4 .github
55 component.json
66 coverage
+0
-12
.travis.yml less more
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
66
77 **N.B.** This promise exposes internals via underscore (`_`) prefixed properties. If you use these, your code will break with each new release.
88
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)
2213
2314 ## Installation
2415
149140 })
150141 ```
151142
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
152156 #### Promise.race(array)
153157
154158 Returns a promise that resolves or rejects with the result of the first promise to resolve/reject, e.g.
3333 nodeify(callback: (err: Error, value: T) => void): void;
3434 }
3535
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
3648 interface ThenPromiseConstructor {
3749 /**
3850 * A reference to the prototype.
4860 new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => any): ThenPromise<T>;
4961
5062 /**
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 /**
51143 * Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
52144 * resolve, or rejected when any ThenPromise is rejected.
53145 * @param values An array of Promises.
242334
243335 declare var ThenPromise: ThenPromiseConstructor;
244336
245 export = ThenPromise;
337 export = ThenPromise;
33 "description": "Bare bones Promises/A+ implementation",
44 "main": "index.js",
55 "scripts": {
6 "prepublish": "node build",
6 "build": "node build",
77 "pretest": "node build",
88 "pretest-resolve": "node build",
99 "pretest-extensions": "node build",
9797 });
9898 };
9999
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
100123 Promise.reject = function (value) {
101124 return new Promise(function (resolve, reject) {
102125 reject(value);
00 var Promise = require('../');
1
21
32 exports.deferred = function () {
43 var resolve, reject;
33 var promise = new Promise(function (resolve) {
44 resolve(sentinel)
55 })
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) }}
88
99 var a = {}
1010 var b = {}
127127 assert(this === ctx)
128128 done()
129129 })
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 });
130386 })
131387 })
132388 describe('Promise.all(...)', function () {
33 var Promise = require('../');
44
55 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) {
77 var resolveA, resolveB, resolveC;
88 var A = new Promise(function (resolve, reject) {
99 resolveA = resolve;
2222 done();
2323 });
2424 });
25 it('does not result in any wierd behaviour - 2', function (done) {
25 it('does not result in any weird behaviour - 2', function (done) {
2626 var resolveA, resolveB, resolveC, resolveD;
2727 var A = new Promise(function (resolve, reject) {
2828 resolveA = resolve;
4646 done();
4747 });
4848 });
49 it('does not result in any wierd behaviour - 2', function (done) {
49 it('does not result in any weird behaviour - 2', function (done) {
5050 var promises = [];
5151 var resolveFns = [];
5252 for (var i = 0; i < 100; i++) {