race-as-promised
Advanced tools
Comparing version 0.0.1 to 0.0.2
48
index.js
@@ -40,2 +40,28 @@ /* | ||
function addRaceContender(contender) { | ||
const deferreds = new Set(); | ||
const record = {deferreds, settled: false}; | ||
// This call to `then` happens once for the lifetime of the value. | ||
Promise.resolve(contender).then( | ||
(value) => { | ||
for (const {resolve} of deferreds) { | ||
resolve(value); | ||
} | ||
deferreds.clear(); | ||
record.settled = true; | ||
}, | ||
(err) => { | ||
for (const {reject} of deferreds) { | ||
reject(err); | ||
} | ||
deferreds.clear(); | ||
record.settled = true; | ||
}, | ||
); | ||
return record | ||
} | ||
// Keys are the values passed to race, values are a record of data containing a | ||
@@ -61,23 +87,5 @@ // set of deferreds and whether the value has settled. | ||
if (record === undefined) { | ||
record = {deferreds: new Set([deferred]), settled: false}; | ||
record = addRaceContender(contender); | ||
record.deferreds.add(deferred); | ||
wm.set(contender, record); | ||
// This call to `then` happens once for the lifetime of the value. | ||
Promise.resolve(contender).then( | ||
(value) => { | ||
for (const {resolve} of record.deferreds) { | ||
resolve(value); | ||
} | ||
record.deferreds.clear(); | ||
record.settled = true; | ||
}, | ||
(err) => { | ||
for (const {reject} of record.deferreds) { | ||
reject(err); | ||
} | ||
record.deferreds.clear(); | ||
record.settled = true; | ||
}, | ||
); | ||
} else if (record.settled) { | ||
@@ -84,0 +92,0 @@ // If the value has settled, it is safe to call |
{ | ||
"name": "race-as-promised", | ||
"version": "0.0.1", | ||
"version": "0.0.2", | ||
"description": "Alternate Promise.race() implementation which doesn't leak memory, courtesy Brian Kim (https://github.com/brainkim)", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -33,4 +33,8 @@ # race-as-promised | ||
An additional issue in the original code has been found and fixed by | ||
[Dan Bornstein](https://github.com/danfuzz), whose efforts are | ||
likewise appreciated. | ||
## License | ||
[The Unlicense](https://spdx.org/licenses/Unlicense.html) |
12263
6
240
40