Доброго времени суток! Горожу какой-то дикий костыль, как мне кажется.
Цель такая - ожидать выполнение данных партиями и на основание результатов что-то делать. Здесь нельзя просто воспользоваться await'om какой-то там функции.
Попробовал сделать через такую конструкцию:
Когда приходят данные, добавляем в пул текущей итерации и ожидаем промиса после выполнения requestPull[currentRequestNumber]["promise"]. После этого вытаскиваем результат, который принадлежит данным.
Проблема в том, что иногда уже в процессе выполнения приходят новые данные. Они добавляются в текущий пул, но данные уже обрабатываются. Из-за этого в резалте их не будет. При возвращение промиса при попытке получить результат с этими данными будет undefined. И эти данные теряются.
Каким преобразовать структуру или как все переделать?(
requestPull[currentRequestNumber] = {
"currentRequestNumber": currentRequestNumber, //текущий номер итерации
"promise": run(), //возвращает промис при выполнение
"data": [] //входные данные
"result": {} //результат выполнение run() для каждых данных
}
upd1:
Допустим, данные приходят каждую секунду. Данные нельзя обрабатывать отдельно. Обработка всех пришедших данных занимает 2+3 секунд.
При старте обработки первые две секунды происходят некоторые действия. После этого берутся все данные и начинается обработка. Все данные пришедшие за след три секунды будут потерены.
Промис отработает после окончания обработки ^5 секунд(закончится обработка)^, но результатов не будет по таким данным.
Все числа условные.