Петли само по себе плохо, но это зависит от ситуации. В большинстве случаев вам нужно будет сделать некоторые асинхронные вещи внутри циклов.
Таким образом, мое личное предпочтение заключается в том, чтобы не использовать циклы вообще, а вместо этого использовать функциональные аналоги (forEach/map/reduce/filter). Таким образом, моя база кода остается последовательной (и цикл синхронизации легко заменяется на асинхронный, если это необходимо).
const myArr = [1, 2, 3];
// sync loops
myArr.forEach(syncLogFunction);
console.log('after sync loop');
function syncLogFunction(entry) {
console.log('sync loop', entry);
}
// now we want to change that into an async operation:
Promise.all(myArr.map(asyncLogFunction))
.then(() => console.log('after async loop'));
function asyncLogFunction(entry) {
console.log('async loop', entry);
return new Promise(resolve => setTimeout(resolve, 100));
}
Обратите внимание, как легко вы можете переключаться между версиями синхронизации и асинхронности, структура остается практически такой же.
Надеюсь, это поможет.
(не downvoter), но петли не одобряется в узле по большей части , Это зависит от варианта использования, но иногда асинхронные параметры лучше подходят, а иногда синхронные операции лучше подходят для конкретного сценария –