Я недавно обновил установку HAPI до версии 17, в которой используются обещания, и столкнулся с ситуацией, которую я не знаю, как решить.Это не зависит от HAPI ...
Когда вызывается определенный маршрут, выполняется проверка того, были ли кэшированы результаты конкретного вызова службы.Если это так, мы пропускаем вызов и используем кэшированные результаты - в противном случае выполняется сервисный вызов, который включает в себя обещание.
Проблема в том, что если сервер запущен, а результаты не кэшированы,и мы запускаем нагрузочное тестирование, внезапно возникает поток обращений в службу для получения результатов, потому что они еще не были кэшированы, и одновременно поступило множество запросов.
Что я хочу сделать, так это позволить только первому запросу запустить служебный вызов и просто позволить всем последующим запросам ждать (через обещание?), Чтобы этот вызов вернулся - тогда все ожидающие обещания могут быть разрешены, чтобы другие запросы продолжались.
Как мне это структурировать?Раньше, используя обратные вызовы, я просто добавлял обратные вызовы в список, а затем вызывал все обратные вызовы в этом списке, как только были получены результаты. Могу ли я как-то сделать что-то подобное, но составлять обещания, пока вызов не вернется, затем разрешитьторговый центр?Я все еще новичок в обещаниях, поэтому испытываю трудности с его визуализацией.
Основная упрощенная логика, используемая в настоящее время:
function getData() {
return new Promise(...);
}
...
if (!data) {
data = await getData();
}
return data;
Вместо простого вызова getData (), если данныене кэшируется, я хочу установить флаг, когда getData отправляет запрос, чтобы получить его, и сделать так, чтобы последующие вызовы ожидали его завершения, чтобы собрать данные и двигаться дальше, вместо того, чтобы отправлять еще один запрос.
Спасибо!