Javascript массив карты promise.all - PullRequest
       29

Javascript массив карты promise.all

0 голосов
/ 04 августа 2020

Я пытаюсь обработать все изображения в массиве и sh все обработанные изображения в другом массиве.

Обработка выполняется asyn c, поэтому я использую await Promise.all ждать, пока все изображения будут обработаны. В любом случае, после завершения кода массив не определен.

Вот что я делаю:

async function processImage(image) {
    // ... stuff
    return new Promise((resolve, reject) => {
      (async () => {
        // Validate each image uploaded by the user
        const images = await Promise.all( // <--------------------------------
          imagesIds.map(async (id) => {
             // ... async stuff

            if(!error)
              return processedImage; // <-------------------------------
            else {
              reject(error);
            }  
          }
        }
        // ... stuff
        console.log(images); <-------- undefined
        resolve();
      })();
  }  

Есть идеи, что я делаю неправильно? Спасибо.

1 Ответ

0 голосов
/ 04 августа 2020

Promise.all принимает массив обещаний, которые вы хотите обработать, поэтому в этом случае вы хотите, чтобы ваша функция imageIds.map возвращала список обещаний. Вам не нужно выполнять асинхронные c вещи в функции карты, а просто возвращать обещание, о котором может позаботиться Promise.all. Одним из примеров является то, что если вы выполняете сетевые запросы для каждого идентификатора изображения, у вас есть функция карты return fetch(yourEndPoint + id), а функция Promise.all будет обрабатывать асинхронную c обработку.

См. Это: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...