diff --git a/src/plugins/hooks.js b/src/plugins/hooks.js index 197af92b3d..4717a31fba 100644 --- a/src/plugins/hooks.js +++ b/src/plugins/hooks.js @@ -207,6 +207,34 @@ Hooks.hasListeners = function (hook) { return !!(plugins.loadedHooks[hook] && plugins.loadedHooks[hook].length > 0); }; +function hookHandlerPromise(hook, hookObj, params) { + return new Promise((resolve, reject) => { + let resolved = false; + function _resolve(result) { + if (resolved) { + winston.warn(`[plugins] ${hook} already resolved in plugin ${hookObj.id}`); + return; + } + resolved = true; + resolve(result); + } + const returned = hookObj.method(params, (err, result) => { + if (err) reject(err); else _resolve(result); + }); + + if (utils.isPromise(returned)) { + returned.then( + payload => _resolve(payload), + err => reject(err) + ); + return; + } + if (returned) { + _resolve(returned); + } + }); +} + async function fireFilterHook(hook, hookList, params) { if (!Array.isArray(hookList) || !hookList.length) { return params; @@ -223,31 +251,7 @@ async function fireFilterHook(hook, hookList, params) { if (hookObj.method.constructor && hookObj.method.constructor.name === 'AsyncFunction') { return await hookObj.method(params); } - return new Promise((resolve, reject) => { - let resolved = false; - function _resolve(result) { - if (resolved) { - winston.warn(`[plugins] ${hook} already resolved in plugin ${hookObj.id}`); - return; - } - resolved = true; - resolve(result); - } - const returned = hookObj.method(params, (err, result) => { - if (err) reject(err); else _resolve(result); - }); - - if (utils.isPromise(returned)) { - returned.then( - payload => _resolve(payload), - err => reject(err) - ); - return; - } - if (returned) { - _resolve(returned); - } - }); + return hookHandlerPromise(hook, hookObj, params); } for (const hookObj of hookList) { @@ -303,28 +307,7 @@ async function fireStaticHook(hook, hookList, params) { return timeout(hookObj.method(params), 10000, 'timeout'); } - return new Promise((resolve, reject) => { - let resolved = false; - function _resolve(result) { - if (resolved) { - return; - } - resolved = true; - resolve(result); - } - const returned = hookObj.method(params, (err, result) => { - if (err) reject(err); else _resolve(result); - }); - - if (utils.isPromise(returned)) { - returned.then( - payload => _resolve(payload), - err => reject(err) - ); - return; - } - _resolve(); - }); + return hookHandlerPromise(hook, hookObj, params); } for (const hookObj of hookList) {