У меня есть массив туров из JSON и я импортирую их все в базу данных.
Я использую for-l oop, потому что я хочу извлечь все туры с ошибками в другой файл, поэтому я можно исправить и повторно импортировать позже.
Вот мой код, и он работает, как ожидалось.
const importData = async () => {
const tours = JSON.parse(
await fs.readFile(path.join(__dirname, 'data', 'final.json'), 'utf8')
);
const errorTours = [];
for (let i = 0; i < tours.length; i += 1) {
const tour = tours[parseInt(i, 10)];
try {
await Tour.create(tour);
} catch (e) {
errorTours.push({ tour, error: e });
}
}
await fs.writeFile('errorTour.json', JSON.stringify(errorTours));
console.log('finished!!! :tada:');
}
но я получил «Disallow await внутри циклов (нет -await-in-l oop) «Ошибка EsLint.
Выполнение операции над каждым элементом итерации - обычная задача. Однако выполнение ожидания как части каждой операции является признаком того, что программа не в полной мере использует преимущества распараллеливания async / await.
Обычно код следует реорганизовать, чтобы создать все обещания сразу, а затем получить доступ к результатам с помощью Promise.all (). В противном случае каждая последующая операция не начнется, пока не будет завершена предыдущая.
Может быть, в моем случае Promise.allSettled () подойдет лучше, не так ли?
Я новичок в JS и совершенно запутался в том, как изменить мой код asyn c await на код Promise для использования Promise.allSettled.
Или есть лучший способ повторить асинхронные операции, которые были неудачными?
Вы можете показать мне направление в этом случае?
Спасибо,