Compare commits
No commits in common. '303791e0c255853ca55ce69e79f000a36428da7c' and '20d060306a99a1be6ffe520f8357c55f2932360b' have entirely different histories.
303791e0c2
...
20d060306a
@ -0,0 +1,28 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
const consumable = require("@joepie91/consumable");
|
||||||
|
|
||||||
|
// TODO: Move to separate package, p-listener or something
|
||||||
|
module.exports = function createPromiseListener() {
|
||||||
|
let listeners = consumable([]);
|
||||||
|
|
||||||
|
function consumeListeners() {
|
||||||
|
/* To ensure that a resolve/reject is atomic, and can never apply to the same listener queue twice. */
|
||||||
|
return listeners.replace([]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
listen: function () {
|
||||||
|
return new Promise((resolve, _reject) => {
|
||||||
|
listeners.peek().push(resolve);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
notify: function (promise) {
|
||||||
|
consumeListeners().forEach((listener) => {
|
||||||
|
// Docs: Pass in a rejected promise to produce a rejection on listeners
|
||||||
|
listener(promise);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue