Так понимаю сами задачи асинхронные, но их последовательно надо выполнять.
Обычного массива функций и промисов хватит за глаза:
Вариант 1:
function series(tasks) {
return tasks.reduce((p, task) =>
p.then(() =>
task()), Promise.resolve());
}
series([
async () => { /* ... */ },
async () => { /* ... */ },
async () => { /* ... */ },
async () => { /* ... */ },
]);
Вариант 2:
async function series(tasks) {
for (const task of tasks) {
await task();
}
}
series([
async () => { /* ... */ },
async () => { /* ... */ },
async () => { /* ... */ },
async () => { /* ... */ },
]);