diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js index 7fb3c32e..5f9e172d 100644 --- a/ext/mixed/js/core.js +++ b/ext/mixed/js/core.js @@ -318,13 +318,6 @@ const yomichan = (() => { } getTemporaryListenerResult(eventHandler, userCallback, timeout=null) { - let resolve; - let reject; - const listenerPromise = new Promise((_resolve, _reject) => { - resolve = _resolve; - reject = _reject; - }); - if ( typeof eventHandler.addListener === 'undefined' || typeof eventHandler.removeListener === 'undefined' @@ -332,32 +325,32 @@ const yomichan = (() => { throw new Error('Event handler type not supported'); } - const runtimeMessageCallback = ({action, params}, sender, sendResponse) => { - let timeoutId = null; - if (timeout !== null) { - timeoutId = window.setTimeout(() => { - timeoutId = null; - eventHandler.removeListener(runtimeMessageCallback); - reject(new Error(`Listener timed out in ${timeout} ms`)); - }, timeout); - } - - const cleanupResolve = (value) => { - if (timeoutId !== null) { - window.clearTimeout(timeoutId); - timeoutId = null; + return new Promise((resolve, reject) => { + const runtimeMessageCallback = ({action, params}, sender, sendResponse) => { + let timeoutId = null; + if (timeout !== null) { + timeoutId = window.setTimeout(() => { + timeoutId = null; + eventHandler.removeListener(runtimeMessageCallback); + reject(new Error(`Listener timed out in ${timeout} ms`)); + }, timeout); } - eventHandler.removeListener(runtimeMessageCallback); - sendResponse(); - resolve(value); + + const cleanupResolve = (value) => { + if (timeoutId !== null) { + window.clearTimeout(timeoutId); + timeoutId = null; + } + eventHandler.removeListener(runtimeMessageCallback); + sendResponse(); + resolve(value); + }; + + userCallback({action, params}, {resolve: cleanupResolve, sender}); }; - userCallback({action, params}, {resolve: cleanupResolve, sender}); - }; - - eventHandler.addListener(runtimeMessageCallback); - - return listenerPromise; + eventHandler.addListener(runtimeMessageCallback); + }); } // Private