Эслинт выдает мне ошибку "Неожиданно await
внутри цикла".
Я понимаю проблему, но не могу найти способ исправить код.
Я прочитал документы eslint: https://eslint.org/docs/rules/no-await-in-loop
Когда я оборачиваю свой цикл в /* eslint-disable no-await-in-loop */
, это исправляет ошибку. Однако это неэффективно, потому что каждое обещание будет ждать завершения предыдущего.
Результаты моих обещаний не зависят друг от друга, поэтому они могут выполняться одновременно. Я прав?
Я был бы рад, если бы кто-нибудь мог показать мне, как исправить мой текущий код и использовать Promises
const resizeImages = async imagePaths => {
try{
// With the line bellow everything works as expected. But without it I get error
/* eslint-disable no-await-in-loop */
const results = [];
for (const imagePath of imagePaths){
const thumbDest = path.parse(imagePath).dir + '/resized' + path.basename(imagePath);
let tempFilePath = path.join(os.tmpdir(), path.basename(imagePath));
console.log("Image resizing in progress: " + imagePath);
// File is downloaded to the firebase functions environment
await rootBucket.file(imagePath).download({
destination: tempFilePath
})
// Uploading resized image back to the folder in firebase storage
await spawn('convert', [tempFilePath, '-resize', '900x900', tempFilePath]);
// Uploading resized image back to the folder in firebase storage
const uploadedFile = await rootBucket.upload(tempFilePath, {
destination: thumbDest,
metadata: metadata
})
console.log("Resized img successfully saved in: " + thumbDest);
console.log("Resized img mediaLink " + uploadedFile[0].metadata.mediaLink);
results.push(uploadedFile[0].metadata.mediaLink);
}
/* eslint-enable no-await-in-loop */
return resizedImages = results;
}
catch (err){
return console.log("Function resizeImages error: " + err);
}
}
Это часть облачной функции Google Firebase, в которой я пытаюсь создать миниатюру, уменьшить размер загруженных изображений и удалить оригинальные.