refactor getTemporaryListenerResult timeout

This commit is contained in:
siikamiika 2020-03-22 12:45:58 +02:00
parent d88635cbb2
commit fa65ab3512
2 changed files with 15 additions and 11 deletions

View File

@ -50,7 +50,8 @@ class FrameOffsetForwarder {
if (action === 'frameOffset' && isObject(params) && params.uniqueId === uniqueId) {
resolve(params);
}
}
},
5000
);
window.parent.postMessage({

View File

@ -312,8 +312,7 @@ const yomichan = (() => {
this.trigger('orphaned', {error});
}
getTemporaryListenerResult(eventHandler, userCallback, timeout=30000) {
let resolved = false;
getTemporaryListenerResult(eventHandler, userCallback, timeout=null) {
let resolve;
let reject;
const listenerPromise = new Promise((_resolve, _reject) => {
@ -323,20 +322,24 @@ const yomichan = (() => {
if (eventHandler === chrome.runtime.onMessage) {
const runtimeMessageCallback = ({action, params}, sender, sendResponse) => {
let timeoutId = null;
if (timeout !== null) {
timeoutId = window.setTimeout(() => {
timeoutId = null;
reject(new Error(`Listener timed out in ${timeout} ms`));
eventHandler.removeListener(runtimeMessageCallback);
}, timeout);
}
const cleanupResolve = (value) => {
resolved = true;
if (timeoutId !== null) {
window.clearTimeout(timeoutId);
}
eventHandler.removeListener(runtimeMessageCallback);
sendResponse();
resolve(value);
};
setTimeout(() => {
if (!resolved) {
reject(new Error(`Listener timed out in ${timeout} ms`));
eventHandler.removeListener(runtimeMessageCallback);
}
}, timeout);
userCallback({action, params}, {resolve: cleanupResolve, sender});
};