Я сделал пружинный реактивный бэкэнд, который возвращает объект Flux<>. Когда я вызываю службу с угловым HTTP-клиент и подписываюсь на возвращаемый наблюдаемый объект. Результат никогда не срабатывает. Так почему же возвращается Observable, а не Promise, если возможен только один ответ? Я пробовал то же самое с жестко запрограммированной службой SSE nodeJS. У меня тот же результат, но он хорошо работает с источником событий. Мой вопрос может показаться странным, но Observable был выбран не случайно, поэтому мое понимание, безусловно, неверно, и я хочу понять.
Мой вопрос неясен, извините. Я хочу знать, как Observable, если его можно запустить только один раз? Это добавляет сложности ни за что.
Наблюдаемое, которое выдает единственное значение и завершается, не сложнее обещания.
При обещании не нужно было отписываться, ожидается только один ответ. Для меня Observable похож на очередь. Он используется для отправки сообщения и выполнения каких-либо действий при его отправке.
Вам также не нужно отписываться от наблюдаемого объекта, который завершается.
@JohnMontgomery проблема в том, что вы не знаете, что когда завершится Observable. Это может завершиться после, компонент уже уничтожен. Представьте, что вы находитесь в очень медленной сети, и компонент вызывает HttpClient, который завершается более 10 секунд. Если пользователь уходит за 5 секунд, компонент уничтожается, но по-прежнему имеет активную подписку на Observable: подписка не была отменена! Уничтоженный компонент по-прежнему будет обрабатывать Observable. Это то поведение, которое вы ожидаете от своего приложения? См. stackoverflow.com/questions/35042929
@WoutervanKoppen Обещания продолжают выполняться, если компонент также уничтожается, так что это все еще не имеет существенного значения в отношении этого вопроса. Во всяком случае, это еще один аргумент в пользу наблюдаемого, поскольку у них больше возможностей для обработки подобных случаев.





Angular httpclient всегда будет возвращать наблюдаемое (RXjs), обещание устарело в новых версиях Angular, вам необходимо подписаться на наблюдаемое
для получения дополнительной информации прочитайте документация чтобы узнать больше о Observables, проверьте это, если вы новичок в Rxjs, проверьте это.
Я знаю это. Но зачем Observable, если Observable можно запустить только один раз?
@ Pred05 Я предлагаю вам прочитать, как на самом деле работает наблюдаемый шаблон rxjs. Это может быть немного крутой кривой обучения, но оно того стоит :)
Он работает с SSE?
@ Pred05 Подписка на наблюдаемые аналогична подписке на журнал, он будет продолжать искать изменения. Обещание всегда возвращает успех отклонения, подписка на наблюдаемые означает, что продолжать искать изменения в наблюдаемых имеет смысл? мой пост тоже отредактировал
Наблюдаемые объекты имеют несколько преимуществ по сравнению с промисами при выполнении HTTP-запросов:
retry, retryWhen)switchMap, unsubscribe...)
Наблюдаемые прекрасно работают с одним ответом. Почему бы и нет?