UNPKG

molstar

Version:

A comprehensive macromolecular library.

213 lines 8.85 kB
/** * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ import { __awaiter, __generator } from "tslib"; import { Task, Scheduler, MultistepTask, chunkedSubtask } from '../mol-task'; import { now } from '../mol-util/now'; export function test1() { return __awaiter(this, void 0, void 0, function () { var t, r; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: t = Task.create('test', function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, 1]; }); }); }); return [4 /*yield*/, t.run()]; case 1: r = _a.sent(); console.log(r); return [2 /*return*/]; } }); }); } function messageTree(root, prefix) { if (prefix === void 0) { prefix = ''; } var p = root.progress; if (!root.children.length) { if (p.isIndeterminate) return "" + prefix + p.taskName + ": " + p.message; return "" + prefix + p.taskName + ": [" + p.current + "/" + p.max + "] " + p.message; } var newPrefix = prefix + ' |_ '; var subTree = root.children.map(function (c) { return messageTree(c, newPrefix); }); if (p.isIndeterminate) return "" + prefix + p.taskName + ": " + p.message + "\n" + subTree.join('\n'); return "" + prefix + p.taskName + ": [" + p.current + "/" + p.max + "] " + p.message + "\n" + subTree.join('\n'); } function createTask(delayMs, r) { var _this = this; return Task.create('delayed value ' + r, function (ctx) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: ctx.update("Processing delayed " + r + " after " + delayMs + "ms", true); return [4 /*yield*/, Scheduler.delay(delayMs)]; case 1: _a.sent(); if (!ctx.shouldUpdate) return [3 /*break*/, 3]; return [4 /*yield*/, ctx.update({ message: "hello from delayed " + r + " " + delayMs })]; case 2: _a.sent(); _a.label = 3; case 3: return [2 /*return*/, r]; } }); }); }, function () { return console.log('On abort called ' + r); }); } export function abortAfter(delay) { var _this = this; return Task.create('abort after ' + delay, function (ctx) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, Scheduler.delay(delay)]; case 1: _a.sent(); throw Task.Aborted('test'); } }); }); }); } export function testTree() { var _this = this; return Task.create('test o', function (ctx) { return __awaiter(_this, void 0, void 0, function () { var c1, c2, c3, r, _a, _b; return __generator(this, function (_c) { switch (_c.label) { case 0: return [4 /*yield*/, Scheduler.delay(250)]; case 1: _c.sent(); if (!ctx.shouldUpdate) return [3 /*break*/, 3]; return [4 /*yield*/, ctx.update({ message: 'hi! 1' })]; case 2: _c.sent(); _c.label = 3; case 3: return [4 /*yield*/, Scheduler.delay(125)]; case 4: _c.sent(); if (!ctx.shouldUpdate) return [3 /*break*/, 6]; return [4 /*yield*/, ctx.update({ message: 'hi! 2' })]; case 5: _c.sent(); _c.label = 6; case 6: return [4 /*yield*/, Scheduler.delay(250)]; case 7: _c.sent(); if (!ctx.shouldUpdate) return [3 /*break*/, 9]; return [4 /*yield*/, ctx.update('hi! 3')]; case 8: _c.sent(); _c.label = 9; case 9: c1 = createTask(250, 1).runAsChild(ctx); c2 = createTask(500, 2).runAsChild(ctx); c3 = createTask(750, 3).runAsChild(ctx); return [4 /*yield*/, c1]; case 10: _a = (_c.sent()); return [4 /*yield*/, c2]; case 11: _b = _a + (_c.sent()); return [4 /*yield*/, c3]; case 12: r = _b + (_c.sent()); if (!ctx.shouldUpdate) return [3 /*break*/, 14]; return [4 /*yield*/, ctx.update({ message: 'Almost done...' })]; case 13: _c.sent(); _c.label = 14; case 14: return [2 /*return*/, r + 1]; } }); }); }, function () { return console.log('On abort O'); }); } function processChunk(n, state) { var toProcess = Math.min(state.current + n, state.total); var start = state.current; for (var i = start; i < toProcess; i++) { for (var j = 0; j < 1000000; j++) { state.i += (i * j + 1 + state.i) % 1023; state.i = state.i % 1000; } } state.current = toProcess; return toProcess - start; } export var ms = MultistepTask('ms-task', ['step 1', 'step 2', 'step 3'], function (p, step, ctx) { return __awaiter(void 0, void 0, void 0, function () { var child; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, step(0)]; case 1: _a.sent(); child = Task.create('chunked', function (ctx) { return __awaiter(void 0, void 0, void 0, function () { var s; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, chunkedSubtask(ctx, 25, { i: 0, current: 0, total: 125 }, processChunk, function (ctx, s, p) { return ctx.update('chunk test ' + p); })]; case 1: s = _a.sent(); return [2 /*return*/, s.i]; } }); }); }); return [4 /*yield*/, child.runAsChild(ctx)]; case 2: _a.sent(); return [4 /*yield*/, Scheduler.delay(250)]; case 3: _a.sent(); return [4 /*yield*/, step(1)]; case 4: _a.sent(); return [4 /*yield*/, chunkedSubtask(ctx, 25, { i: 0, current: 0, total: 80 }, processChunk, function (ctx, s, p) { return ctx.update('chunk test ' + p); })]; case 5: _a.sent(); return [4 /*yield*/, Scheduler.delay(250)]; case 6: _a.sent(); return [4 /*yield*/, step(2)]; case 7: _a.sent(); return [4 /*yield*/, Scheduler.delay(250)]; case 8: _a.sent(); return [2 /*return*/, p.i + 3]; } }); }); }); export function abortingObserver(p) { console.log(messageTree(p.root)); if (now() - p.root.progress.startedTime > 1000) { p.requestAbort('test'); } } export function logP(p) { console.log(messageTree(p.root)); } function test() { return __awaiter(this, void 0, void 0, function () { var m, e_1; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, testTree().run(abortingObserver, 50)]; case 1: m = _a.sent(); console.log(m); return [3 /*break*/, 3]; case 2: e_1 = _a.sent(); console.error(e_1); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); } test(); // testObs(); //# sourceMappingURL=task.js.map