diff --git a/src/plugins/hooks.js b/src/plugins/hooks.js index 394c11c5b8..f14c94791f 100644 --- a/src/plugins/hooks.js +++ b/src/plugins/hooks.js @@ -137,9 +137,14 @@ async function fireFilterHook(hook, hookList, params) { payload => resolve(payload), err => reject(err) ); + return; + } + if (returned) { + resolve(returned); } }); } + for (const hookObj of hookList) { // eslint-disable-next-line params = await fireMethod(hookObj, params); diff --git a/test/plugins.js b/test/plugins.js index 21d0ff94b7..b7b5575d28 100644 --- a/test/plugins.js +++ b/test/plugins.js @@ -47,7 +47,7 @@ describe('Plugins', () => { }); }); - it('should register and fire a filter hook having 2 methods, one returning a promise, one calling the callback', async () => { + it('should register and fire a filter hook having 3 methods, one returning a promise, one calling the callback and one just returning', async () => { function method1(data, callback) { data.foo += 1; callback(null, data); @@ -58,12 +58,17 @@ describe('Plugins', () => { resolve(data); }); } + function method3(data) { + data.foo += 1; + return data; + } plugins.hooks.register('test-plugin', { hook: 'filter:test.hook2', method: method1 }); plugins.hooks.register('test-plugin', { hook: 'filter:test.hook2', method: method2 }); + plugins.hooks.register('test-plugin', { hook: 'filter:test.hook2', method: method3 }); const data = await plugins.hooks.fire('filter:test.hook2', { foo: 1 }); - assert.strictEqual(data.foo, 7); + assert.strictEqual(data.foo, 8); }); it('should register and fire a filter hook that returns a promise that gets rejected', (done) => {