diff options
Diffstat (limited to 'ext/mixed/js')
| -rw-r--r-- | ext/mixed/js/api.js | 11 | ||||
| -rw-r--r-- | ext/mixed/js/core.js | 41 | 
2 files changed, 23 insertions, 29 deletions
| diff --git a/ext/mixed/js/api.js b/ext/mixed/js/api.js index 5c17d50e..1e421147 100644 --- a/ext/mixed/js/api.js +++ b/ext/mixed/js/api.js @@ -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 { diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js index e22be33d..fec26a0e 100644 --- a/ext/mixed/js/core.js +++ b/ext/mixed/js/core.js @@ -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 |