Возвращаемое значение Javascript из подфункции async только после завершения

Я хотел бы реализовать следующий сценарий в javascript:

У меня есть массив, который я перебираю для вызова асинхронного запроса на каждой итерации. Когда все асинхронные запросы выполнены, у меня май или может нет есть другой массив (в основном невыполненные запросы), и только когда все запросы будут выполнены, я бы вызвал другую асинхронную функцию, дождался ее завершения и только затем вернул окончательный результат вся операция.

Я делаю что-то вроде этого: я вызываю функцию (functionA), которая асинхронно получает массив, затем для каждого элемента массива я вызываю запрос, и когда он отвечает, я увеличиваю счетчик, и если ответ был отрицательным, я нажимаю повторяемый элемент в новом массиве. Когда счетчик достигает длины массива, я вызываю другую функцию (functionB). FunctionB вызывает два асинхронных запроса один за другим, а затем возвращает окончательный результат («ДА» или «НЕТ»).

Моя проблема в том, что я вызываю functionB из цикла forEach arrayA в .then(), но как я могу вернуть его возврат в functionA, а затем в вызывающий functionA?

Попробую написать код:


const functionA = () => {
  const newArray = [];

  const functionB = () => {
    return callbackB().then(() => {
      if (!!newArray.length) {
        return callbackC(newArray).then(() => {
          return "YES";
        });
      } else {
        return "NO";
      }
    });
  };

  return getOldArray().then((oldArray) => {
    let counter = 0;
    oldArray.forEach((element) => {
      callbackA().then((response) => {
        if (response !== "ok") {
          newArray.push(element);
        }
        counter++;
        if (counter === oldArray.length) {
          return functionB();
        }
      });
    });
  });
};

const desiredResult = functionA();

(Я опустил .catch() для простоты)

Я пробовал сделать как functionA, так и functionB асинхронными и ждать их результатов, но functionB находится в цикле forEach, и его возврат просто прерывает цикл, который уже был на последней итерации.

Как мне получить значения «ДА» и «НЕТ» вне функции A? Прямо сейчас желаемый результат остается undefined, потому что к тому времени, когда функция A возвращает callbackC, еще не завершена.

заранее спасибо


18