From f2345b7d1c035422dad553a4541ee486d952afa9 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sun, 28 Jun 2020 14:39:43 -0400 Subject: Use deferPromise (#630) * Use deferPromise * Move definition * Implement promiseTimeout using deferPromise --- ext/mixed/js/api.js | 11 +++++------ ext/mixed/js/core.js | 41 ++++++++++++++++++----------------------- 2 files changed, 23 insertions(+), 29 deletions(-) (limited to 'ext/mixed/js') 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 -- cgit v1.2.3