diff --git a/package.json b/package.json index 83c126a..021091a 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "author": "Sven Slootweg ", "license": "WTFPL OR CC0-1.0", "dependencies": { + "@joepie91/consumable": "^1.0.1", "@promistream/is-aborted": "^0.1.1", "@promistream/is-end-of-stream": "^0.1.1", "@promistream/pipe": "^0.1.4", diff --git a/promise-listener.js b/promise-listener.js index 5918d9d..f664caa 100644 --- a/promise-listener.js +++ b/promise-listener.js @@ -1,19 +1,19 @@ "use strict"; +const consumable = require("@joepie91/consumable"); + module.exports = function createPromiseListener() { - let listeners = []; + let listeners = consumable([]); function consumeListeners() { /* To ensure that a resolve/reject is atomic, and can never apply to the same listener queue twice. */ - let consumedListeners = listeners; - listeners = []; - return consumedListeners; + return listeners.replace([]); } return { listen: function () { return new Promise((resolve, reject) => { - listeners.push({ resolve, reject }); + listeners.peek().push({ resolve, reject }); }); }, resolve: function (value) { @@ -27,4 +27,4 @@ module.exports = function createPromiseListener() { }); }, } -}; \ No newline at end of file +};