Use deferPromise (#630)
* Use deferPromise * Move definition * Implement promiseTimeout using deferPromise
This commit is contained in:
parent
7b5dd5c310
commit
f2345b7d1c
@ -78,10 +78,10 @@ class Backend {
|
||||
this._isPrepared = false;
|
||||
this._prepareError = false;
|
||||
this._preparePromise = null;
|
||||
this._prepareCompletePromise = new Promise((resolve, reject) => {
|
||||
const {promise, resolve, reject} = deferPromise();
|
||||
this._prepareCompletePromise = promise;
|
||||
this._prepareCompleteResolve = resolve;
|
||||
this._prepareCompleteReject = reject;
|
||||
});
|
||||
|
||||
this._defaultBrowserActionTitle = null;
|
||||
this._badgePrepareDelayTimer = null;
|
||||
@ -1269,8 +1269,7 @@ class Backend {
|
||||
static async _findTab(timeout, checkUrl) {
|
||||
// This function works around the need to have the "tabs" permission to access tab.url.
|
||||
const tabs = await new Promise((resolve) => chrome.tabs.query({}, resolve));
|
||||
let matchPromiseResolve = null;
|
||||
const matchPromise = new Promise((resolve) => { matchPromiseResolve = resolve; });
|
||||
const {promise: matchPromise, resolve: matchPromiseResolve} = deferPromise();
|
||||
|
||||
const checkTabUrl = ({tab, url}) => {
|
||||
if (checkUrl(url, tab)) {
|
||||
|
@ -229,12 +229,11 @@ class Popup {
|
||||
return new Promise((resolve, reject) => {
|
||||
const tokenMap = new Map();
|
||||
let timer = null;
|
||||
let frameLoadedResolve = null;
|
||||
let frameLoadedReject = null;
|
||||
const frameLoaded = new Promise((resolve2, reject2) => {
|
||||
frameLoadedResolve = resolve2;
|
||||
frameLoadedReject = reject2;
|
||||
});
|
||||
let {
|
||||
promise: frameLoadedPromise,
|
||||
resolve: frameLoadedResolve,
|
||||
reject: frameLoadedReject
|
||||
} = deferPromise();
|
||||
|
||||
const postMessage = (action, params) => {
|
||||
const contentWindow = frame.contentWindow;
|
||||
@ -261,7 +260,7 @@ class Popup {
|
||||
if (!isObject(message)) { return; }
|
||||
const {action, params} = message;
|
||||
if (!isObject(params)) { return; }
|
||||
await frameLoaded;
|
||||
await frameLoadedPromise;
|
||||
if (timer === null) { return; } // Done
|
||||
|
||||
switch (action) {
|
||||
@ -331,7 +330,7 @@ class Popup {
|
||||
frame.addEventListener('load', onLoad);
|
||||
|
||||
// Prevent unhandled rejections
|
||||
frameLoaded.catch(() => {}); // NOP
|
||||
frameLoadedPromise.catch(() => {}); // NOP
|
||||
|
||||
setupFrame(frame);
|
||||
});
|
||||
|
@ -212,12 +212,11 @@ const api = (() => {
|
||||
_createActionPort(timeout=5000) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let timer = null;
|
||||
let portNameResolve;
|
||||
let portNameReject;
|
||||
const portNamePromise = new Promise((resolve2, reject2) => {
|
||||
portNameResolve = resolve2;
|
||||
portNameReject = reject2;
|
||||
});
|
||||
const {
|
||||
promise: portNamePromise,
|
||||
resolve: portNameResolve,
|
||||
reject: portNameReject
|
||||
} = deferPromise();
|
||||
|
||||
const onConnect = async (port) => {
|
||||
try {
|
||||
|
@ -197,6 +197,16 @@ const clone = (() => {
|
||||
* Async utilities
|
||||
*/
|
||||
|
||||
function deferPromise() {
|
||||
let resolve;
|
||||
let reject;
|
||||
const promise = new Promise((resolve2, reject2) => {
|
||||
resolve = resolve2;
|
||||
reject = reject2;
|
||||
});
|
||||
return {promise, resolve, reject};
|
||||
}
|
||||
|
||||
function promiseTimeout(delay, resolveValue) {
|
||||
if (delay <= 0) {
|
||||
const promise = Promise.resolve(resolveValue);
|
||||
@ -206,8 +216,7 @@ function promiseTimeout(delay, resolveValue) {
|
||||
}
|
||||
|
||||
let timer = null;
|
||||
let promiseResolve = null;
|
||||
let promiseReject = null;
|
||||
let {promise, resolve, reject} = deferPromise();
|
||||
|
||||
const complete = (callback, value) => {
|
||||
if (callback === null) { return; }
|
||||
@ -215,39 +224,25 @@ function promiseTimeout(delay, resolveValue) {
|
||||
clearTimeout(timer);
|
||||
timer = null;
|
||||
}
|
||||
promiseResolve = null;
|
||||
promiseReject = null;
|
||||
resolve = null;
|
||||
reject = null;
|
||||
callback(value);
|
||||
};
|
||||
|
||||
const resolve = (value) => complete(promiseResolve, value);
|
||||
const reject = (value) => complete(promiseReject, value);
|
||||
const resolveWrapper = (value) => complete(resolve, value);
|
||||
const rejectWrapper = (value) => complete(reject, value);
|
||||
|
||||
const promise = new Promise((resolve2, reject2) => {
|
||||
promiseResolve = resolve2;
|
||||
promiseReject = reject2;
|
||||
});
|
||||
timer = setTimeout(() => {
|
||||
timer = null;
|
||||
resolve(resolveValue);
|
||||
resolveWrapper(resolveValue);
|
||||
}, delay);
|
||||
|
||||
promise.resolve = resolve;
|
||||
promise.reject = reject;
|
||||
promise.resolve = resolveWrapper;
|
||||
promise.reject = rejectWrapper;
|
||||
|
||||
return promise;
|
||||
}
|
||||
|
||||
function deferPromise() {
|
||||
let resolve;
|
||||
let reject;
|
||||
const promise = new Promise((resolve2, reject2) => {
|
||||
resolve = resolve2;
|
||||
reject = reject2;
|
||||
});
|
||||
return {promise, resolve, reject};
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Common events
|
||||
|
Loading…
Reference in New Issue
Block a user