redis-smq-common
Version:
Provides essential components and utilities shared across RedisSMQ packages.
41 lines • 1.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.waterfall = waterfall;
function waterfall(tasks, callback) {
if (!Array.isArray(tasks)) {
return callback(new Error('First argument to waterfall must be an array of functions'));
}
if (tasks.length === 0) {
return callback();
}
let taskIndex = 0;
function nextTask(error, result) {
if (error) {
return callback(error);
}
taskIndex = taskIndex + 1;
if (taskIndex >= tasks.length) {
return callback(null, result);
}
setImmediate(() => {
try {
if (taskIndex === 0) {
tasks[taskIndex](nextTask);
}
else {
tasks[taskIndex](result, nextTask);
}
}
catch (err) {
callback(err instanceof Error ? err : new Error(String(err)));
}
});
}
try {
tasks[0](nextTask);
}
catch (err) {
callback(err instanceof Error ? err : new Error(String(err)));
}
}
//# sourceMappingURL=waterfall.js.map