molstar
Version:
A comprehensive macromolecular library.
80 lines • 3.22 kB
JavaScript
/**
* Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { __awaiter, __generator } from "tslib";
import { ExecuteObservable, ExecuteObservableChild, ExecuteInContext } from './execution/observable';
import { SyncRuntimeContext } from './execution/synchronous';
import { idFactory } from '../mol-util/id-factory';
var Task;
(function (Task) {
var Impl = /** @class */ (function () {
function Impl(name, f, onAbort) {
this.name = name;
this.f = f;
this.onAbort = onAbort;
this.id = getNextId();
}
Impl.prototype.run = function (observer, updateRateMs) {
if (updateRateMs === void 0) { updateRateMs = 250; }
if (observer)
return ExecuteObservable(this, observer, updateRateMs);
return this.f(SyncRuntimeContext);
};
Impl.prototype.runAsChild = function (ctx, progress) {
if (ctx.isSynchronous)
return this.f(SyncRuntimeContext);
return ExecuteObservableChild(ctx, this, progress);
};
Impl.prototype.runInContext = function (ctx) {
if (ctx.isSynchronous)
return this.f(SyncRuntimeContext);
return ExecuteInContext(ctx, this);
};
return Impl;
}());
function is(t) {
var _t = t;
return !!t && typeof _t.id === 'number' && typeof _t.name === 'string' && !!_t.run;
}
Task.is = is;
function isAbort(e) { return !!e && !!e.isAborted; }
Task.isAbort = isAbort;
function Aborted(reason) { return { isAborted: true, reason: reason, toString: function () { return "Aborted" + (reason ? ': ' + reason : ''); } }; }
Task.Aborted = Aborted;
function create(name, f, onAbort) {
return new Impl(name, f, onAbort);
}
Task.create = create;
function constant(name, value) {
var _this = this;
return create(name, function (ctx) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
return [2 /*return*/, value];
}); }); });
}
Task.constant = constant;
function empty() {
var _this = this;
return create('', function (ctx) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
return [2 /*return*/];
}); }); });
}
Task.empty = empty;
function fail(name, reason) {
var _this = this;
return create(name, function (ctx) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
throw new Error(reason);
}); }); });
}
Task.fail = fail;
function resolveInContext(object, ctx) {
if (is(object))
return ctx ? object.runInContext(ctx) : object.run();
return object;
}
Task.resolveInContext = resolveInContext;
var getNextId = idFactory(0, 0x3fffffff);
})(Task || (Task = {}));
export { Task };
//# sourceMappingURL=task.js.map