@vetsmen

Нормально ли общаться с микросервисами через промисы?

Нормальная ли практика общаться с микросервисами через промисы?
Есть подобная конструкция:
const getData = (data) => {
    return new Promise((resolve, reject) => {
        rpc.send(data);
        rpc
            .onRequest(newData => resolve(newData))
            .onError(error => reject(error));
    })
}

где RPC - какой-то протокол, через который идет общение с микросервисом.

В связи с этим появляются вопросы:
1) Что, если ответ от микросервиса будет долгим, а запросов генерироваться будет много? Ведь по идеи стек вызова может переполниться из-за кучи промисов с состоянием pending.
2) Что, если ответ не придет вообще? Ведь промис просто так не reject'нится, опять упираемся в переполнение стека. Первое приходит в голову setTimeout, который будет сам reject'ить промис по истечению определенного времени, но тогда данные будут утеряны, которые возможно могли придти бы позже.
  • Вопрос задан
  • 394 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Практика – нормальная.

Обе проблемы «Что, если» надуманы и нерелевантны.
Что конкретно хотелось бы делать в случае подзадержвашегося ответа? Скажем, установили некий порог в 10 секунд. Ответа всё ещё нет.
Варианты, собственно: подождать ещё, либо реджектнуть. Ещё можно представить вариант - оборвать предыдущую попытку и отправить то же самое повторно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vshvydky
Посмотри на nest там уже есть реализация
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы