diff options
Diffstat (limited to 'core/core.js')
-rw-r--r-- | core/core.js | 24 |
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)); } } |