redis-smq-common
Version:
Provides essential components and utilities shared across RedisSMQ packages.
38 lines • 1.08 kB
JavaScript
export 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