Я хотел бы реализовать следующий сценарий в 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, еще не завершена.
заранее спасибо