From: Darren <darren@darrenwhitlen.com> Date: Sat, 18 Oct 2014 00:54:48 +0000 (+0100) Subject: PluginInterface.emit readability X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=f0f067391468769fad8f39c86becea49813469af;p=KiwiIRC.git PluginInterface.emit readability --- diff --git a/server/plugininterface.js b/server/plugininterface.js index 322efa6..d74ec6c 100644 --- a/server/plugininterface.js +++ b/server/plugininterface.js @@ -55,18 +55,21 @@ PluginInterface.prototype.off = PluginInterface.prototype.removeListener = funct PluginInterface.prototype.emit = function emit(type, data) { var that = this; + return new Promise(function (emit_resolve, emit_reject) { var rejected = false, - rejected_reasons = []; + rejected_reasons = [], + listeners_promise; if (!that.listeners[type]) { return emit_resolve(data); } - (that.listeners[type].reduce(function (listener_promise, listener) { + // Add each listener as a promise .then() + listeners_promise = that.listeners[type].reduce(function (listener_promise, listener) { return listener_promise.then(function (data) { return new Promise(function (resolve) { - listener({ + var event_data = { callback: function () { resolve(data); }, @@ -76,10 +79,15 @@ PluginInterface.prototype.emit = function emit(type, data) { rejected_reasons.push(reason); } } - }, data); + }; + + listener(event_data, data); }); }); - }, Promise.resolve(data))).then(function (data) { + }, Promise.resolve(data)); + + // After all the listeners have been called, resolve back with any modified data + listeners_promise.then(function (data) { if (rejected) { emit_reject({data: data, reasons: rejected_reasons}); } else {