You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
1.3 KiB

1 month ago
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("./utils");
function throwLater(e) {
setTimeout(function () {
throw e;
}, 0);
}
function asCallback(promise, nodeback, options) {
if (typeof nodeback === "function") {
promise.then((val) => {
let ret;
if (options !== undefined &&
Object(options).spread &&
Array.isArray(val)) {
ret = utils_1.tryCatch(nodeback).apply(undefined, [null].concat(val));
}
else {
ret =
val === undefined
? utils_1.tryCatch(nodeback)(null)
: utils_1.tryCatch(nodeback)(null, val);
}
if (ret === utils_1.errorObj) {
throwLater(ret.e);
}
}, (cause) => {
if (!cause) {
const newReason = new Error(cause + "");
Object.assign(newReason, { cause });
cause = newReason;
}
const ret = utils_1.tryCatch(nodeback)(cause);
if (ret === utils_1.errorObj) {
throwLater(ret.e);
}
});
}
return promise;
}
exports.default = asCallback;