Angular Http - toPromise или подписаться

Я просмотрел несколько курсов по Angular и нашел, что есть способы управления данными из запроса Http.

  • Использование Observables, .map(), .subscribe()
  • Используя Promises, .toPromise(), .then(), .catch()

Я использовал toPromise() в своем приложении, поскольку нашел его похожим на службы AngularJS Http.

В каком сценарии мне понадобится использовать Observables?

Ответ 1

Если вам нравится стиль реактивного программирования и вы хотите быть последовательным в своем приложении, чтобы всегда использовать наблюдаемые даже для отдельных событий (вместо потоков событий), то используйте наблюдаемые. Если это не важно для вас, используйте toPromise().

Одним из преимуществ наблюдаемых является то, что вы можете отменить запрос.

См. также Angular - Promise vs Observable

Ответ 2

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

Ответ 3

HTTP-запросы по умолчанию в угловом формате испускают наблюдаемые. Его можно преобразовать в обещание, вызвав toPromise(). Но это не обязательно. Angular отменяет подписку на http-запрос, как только он будет решен путем вызова

   '_xhr.removeEventListener('load', onLoad);
    _xhr.removeEventListener('error', onError);
    _xhr.abort();'

Наблюдаемые могут быть отменены, но обещания - нет.

Открытый запрос остается даже после уничтожения компонента, что приводит к утечке памяти, которую можно предотвратить, отписав наблюдаемый или вызвав метод уничтожения, как только компонент будет уничтожен. Способы отписаться, чтобы предотвратить утечки памяти

Заключение: лучше использовать наблюдаемые с методами предотвращения утечки памяти.