diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-06-28 14:39:43 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-28 14:39:43 -0400 |
commit | f2345b7d1c035422dad553a4541ee486d952afa9 (patch) | |
tree | a13d87b874b28b1be9cfe8e343cb37c780107883 /ext/mixed/js | |
parent | 7b5dd5c310f7ec4d7f6e329367d34258cce10e8e (diff) |
Use deferPromise (#630)
* Use deferPromise
* Move definition
* Implement promiseTimeout using deferPromise
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 |