Как заставить Promise.all ждать, пока заявления в индивидуальных обещаниях не будут выполнены? - PullRequest
1 голос
/ 01 мая 2020

У меня есть массив объектов, и для каждого объекта мне нужно запустить асинхронную функцию и добавить значение к этому объекту в зависимости от того, что возвращает функция asyn c.

Моя проблема в том, что Promise.all возвращается, когда все мои обещания были выполнены, но до того, как условие в выражении then каждого обещания имеет шанс обновить свой объект:

  function addInlineImageToContentElements(elements) {
    const newElements = elements;
    const promiseArray = [];

    if (newElements) {
      newElements.forEach((el, i) => {
        if (el.type === 'story' && !el.promo_items) {
          getFirstInlineImage(el._id).then((firstInlineImage) => {
            if (firstInlineImage) {
              newElements[i].firstInlineImage = firstInlineImage;
            }
          });
          promiseArray.push(getFirstInlineImage);
        }
      });
    }
    return Promise.all(promiseArray).then(() => newElements);
  }

В результате newElements возвращается, прежде чем он получит шанс на обновление.

1 Ответ

3 голосов
/ 01 мая 2020

Вы не выводите sh обещание в массив, а функцию getFirstInlineImage, которая создает обещание.

Попробуйте изменить код в вашем втором операторе if на:

const promise = getFirstInlineImage(el._id).then((firstInlineImage) => {
    if (firstInlineImage) {
        newElements[i].firstInlineImage = firstInlineImage;
    }
});
promiseArray.push(promise);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...