summaryrefslogtreecommitdiff
path: root/ext/mixed/js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mixed/js')
-rw-r--r--ext/mixed/js/api.js11
-rw-r--r--ext/mixed/js/core.js41
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