Нужна async/await foreach функция с задержкой выполнения.
На данный момент есть такое решение, но оно работает не совсем правильно:
fn.asyncDelayedForEach = async (array, callback, timeout) => {
var i = 0,
l = array.length,
caller = async () => {
await callback.call(array, array[i], i, array);
(++i < l) && setTimeout(caller, timeout);
};
caller();
}
(async () => {
await fn.asyncDelayedForEach([1,3,4], (item, i, arr) => {
console.log(item);
}, 1000)
console.log('a')
console.log('b')
}
)()
Данный код возвращает
1
a
b
3
4
Причем задержка отрабатывает как надо, т.е. 1, 3, 4 возвращаются постепенно с интервалом 1 секунду, а вот
console.log('a')
console.log('b')
должны срабатывать только после завершения выполнения функции asyncDelayedForEach.
Т.е последовательность вывода должна быть такая:
1
3
4
a
b
Как исправить?