Для реализации задуманного нужен момент окончания работы очередной функции – чтобы от него считать 2 секунды.
В вопросе не раскрыта природа функций в массиве: то ли они мгновенно отрабатывают, то ли занимают продолжительное время. Синхронные или асинхронные. Что эти функции возвращают: Promise, значение или ничего?
Можно обернуть каждую в Promise с таймаутом:
[func1, func2, func3]
// обернуть каждую в Promise:
.map((f) => () => new Promise((res, rej) => {
f();
setTimeout(res, 2000));
})
// и собрать цепочку из этих промисов:
.reduce((acc, c) => acc.then(c()), Promise.resolve());
Если эти функции асинхронные, то заменить
- f();
- setTimeout(res, 2000));
+ f()
+ .then(() => setTimeout(res, 2000)));