summaryrefslogtreecommitdiff
path: root/core/core.js
diff options
context:
space:
mode:
Diffstat (limited to 'core/core.js')
-rw-r--r--core/core.js24
1 files changed, 14 insertions, 10 deletions
diff --git a/core/core.js b/core/core.js
index 7c39c1bae..f94ec8139 100644
--- a/core/core.js
+++ b/core/core.js
@@ -44,18 +44,23 @@
}
function processResponse(res) {
- // const [ok, err] = res;
- if (res[1] === null) {
- return res[0];
+ if (!isErr(res)) {
+ return res;
}
- throw processErr(res[1]);
+ throw processErr(res);
+ }
+
+ // .$err_class_name is a special key that should only exist on errors
+ function isErr(res) {
+ return !!(res && res.$err_class_name);
}
function processErr(err) {
- const [ErrorClass, args] = getErrorClassAndArgs(err.className);
+ const className = err.$err_class_name;
+ const [ErrorClass, args] = getErrorClassAndArgs(className);
if (!ErrorClass) {
return new Error(
- `Unregistered error class: "${err.className}"\n ${err.message}\n Classes of errors returned from ops should be registered via Deno.core.registerErrorClass().`,
+ `Unregistered error class: "${className}"\n ${err.message}\n Classes of errors returned from ops should be registered via Deno.core.registerErrorClass().`,
);
}
return new ErrorClass(err.message, ...args);
@@ -82,13 +87,12 @@
}
function opAsyncHandler(promiseId, res) {
- // const [ok, err] = res;
const promise = promiseTable.get(promiseId);
promiseTable.delete(promiseId);
- if (!res[1]) {
- promise.resolve(res[0]);
+ if (!isErr(res)) {
+ promise.resolve(res);
} else {
- promise.reject(processErr(res[1]));
+ promise.reject(processErr(res));
}
}