UNPKG

villa

Version:

Promise utilities for async/await-ready environment.

66 lines 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var _1 = require("."); var lockObjectToPromiseMapping = new Map(); function _lock(object, handler) { return tslib_1.__awaiter(this, void 0, void 0, function () { var error_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, lockObjectToPromiseMapping.get(object)]; case 1: _a.sent(); return [3 /*break*/, 3]; case 2: error_1 = _a.sent(); return [3 /*break*/, 3]; case 3: return [2 /*return*/, handler()]; } }); }); } /** * A simple asynchronous lock that helps queueing operations. */ function lock(object, handler) { return tslib_1.__awaiter(this, void 0, void 0, function () { var ret; return tslib_1.__generator(this, function (_a) { ret = _lock(object, handler); lockObjectToPromiseMapping.set(object, ret); return [2 /*return*/, ret]; }); }); } exports.lock = lock; /** * Run tasks in parallel, similar to `v.map` but not mean to transform. */ function parallel(values, handler, concurrency) { return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, _1.map(values, handler, concurrency)]; case 1: _a.sent(); return [2 /*return*/]; } }); }); } exports.parallel = parallel; /** * Race tasks and fulfill or reject as soon as one of them fulfills or rejects. */ function race(values, transformer) { return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { return [2 /*return*/, Promise.race(values.map(transformer))]; }); }); } exports.race = race; //# sourceMappingURL=concurrency.js.map