You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

28 lines
635 B
JavaScript

"use strict";
const consumable = require("@joepie91/consumable");
module.exports = function pListen() {
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);
});
}
};
};