add timeout for messaging
This commit is contained in:
@ -82,7 +82,7 @@ export async function ping(tab, count = 1) {
|
|||||||
let checker: ResponseChecker<string> = (r, e, c) =>
|
let checker: ResponseChecker<string> = (r, e, c) =>
|
||||||
r.result == "pong" ? r.result : undefined;
|
r.result == "pong" ? r.result : undefined;
|
||||||
|
|
||||||
let pong = await sendMessage<string>(tab, req, 'Check tab availability...', checker, 1000, count).catch(() => { });
|
let pong = await sendMessage<string>(tab, req, 'Check tab availability...', checker, 1000, 1000, count).catch(() => { });
|
||||||
return pong == "pong";
|
return pong == "pong";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -21,12 +21,14 @@ export type ResponseChecker<T> = ResponseCheckerSync<T> | ResponseCheckerAsync<T
|
|||||||
*/
|
*/
|
||||||
export function sendMessage<T>(
|
export function sendMessage<T>(
|
||||||
tab: chrome.tabs.Tab,
|
tab: chrome.tabs.Tab,
|
||||||
req,
|
req: Request,
|
||||||
log?: string,
|
log?: string,
|
||||||
dataChecker?: ResponseChecker<T>,
|
dataChecker?: ResponseChecker<T>,
|
||||||
|
timeout?: number,
|
||||||
interval?: number,
|
interval?: number,
|
||||||
limit?: number
|
limit?: number
|
||||||
) {
|
) {
|
||||||
|
timeout = timeout || 10;
|
||||||
interval = interval || 500;
|
interval = interval || 500;
|
||||||
limit = isNaN(limit) ? 0 : limit;
|
limit = isNaN(limit) ? 0 : limit;
|
||||||
let count = 0;
|
let count = 0;
|
||||||
@ -47,7 +49,9 @@ export function sendMessage<T>(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
|
let timeout = setTimeout(() => { reject(`${Actions[req.action]} requset timeout after ${timeout}s`) }, 10000);
|
||||||
chrome.tabs.sendMessage(tab.id, req, async (r: Response<T>) => {
|
chrome.tabs.sendMessage(tab.id, req, async (r: Response<T>) => {
|
||||||
|
clearTimeout(timeout);
|
||||||
// check error but do nothing until dataChecker.
|
// check error but do nothing until dataChecker.
|
||||||
let err = chrome.runtime.lastError;
|
let err = chrome.runtime.lastError;
|
||||||
let [result, error] = await checkResponse(dataChecker, r, err, count);
|
let [result, error] = await checkResponse(dataChecker, r, err, count);
|
||||||
|
|||||||
Reference in New Issue
Block a user