atombeak
Version:
Create asynchronous atomic functions!
46 lines (45 loc) • 1.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var Log_1 = require("./Log");
exports.ITER = 'ITER';
function iter(next) {
return {
type: exports.ITER,
next: next
};
}
exports.iter = iter;
exports.DONE = 'DONE';
function done(value) {
return {
type: exports.DONE,
value: value
};
}
exports.done = done;
function run(operation, outer, onComplete) {
var log = Log_1.Log.create(outer);
var executed = operation.execute(log);
var rec = function (executed) {
if (executed.type === exports.ITER) {
executed.next().then(function (_a) {
var operation = _a[0], log = _a[1];
rec(operation.execute(log));
});
}
else if (executed.type === exports.DONE) {
onComplete(executed.value);
}
else {
var exhaustive = executed;
throw new Error(exhaustive);
}
};
rec(executed);
}
function runAsPromise(operation, outer) {
return new Promise(function (resolve) {
run(operation, outer, resolve);
});
}
exports.runAsPromise = runAsPromise;