villa
Version:
Promise utilities for async/await-ready environment.
66 lines • 2.2 kB
JavaScript
;
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