Когда использовать Promise сверх наблюдаемого? - PullRequest
0 голосов
/ 10 мая 2018

Есть ли случай, когда обещание является более мощным по сравнению с наблюдаемым? Я знаю много преимуществ наблюдаемого над обещанием. Но есть ли случай, я должен использовать только обещания над наблюдаемыми.

Я нашел эту ссылку, обещания против наблюдений . Но это всегда показывает мне преимущества наблюдаемых над обещаниями. Я хочу знать преимущества обещания над наблюдаемыми.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Наблюдаемое делает все, что делает обещание и даже больше.Его всегда можно переключить на обещание методом toPromise(), если обещание ожидается.

Наблюдаемое должно быть выбрано вместо обещания, если

  • любая особенность, которая присуща наблюдаемым, а не обещания и подробно объяснена в связанном вопросе , востребована (в частности, неполные наблюдаемые и наблюдаемые, которые получают несколько значений)
  • API, который потребляет его, ожидает наблюдаемогои не использует Observable.from(...) структуру безопасности для объединения наблюдаемых и обещаний

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

Обещание must может быть выбрано из наблюдаемого, если API, использующий его, ожидает обещание и не использует Observable.from(...) структуру безопасности.

Обещание может можно выбрать вместо наблюдаемого, если

  • код, в котором он используется, использует исключительно обещания (в частности, async функции)
  • , это необходимо длябыть немедленно подписанным и прикованным затем , потому что цепочка должна быть разорвана в наблюдаемых let observable = ...; observable.subscribe(...); return observable (это также требует отслеживания нескольких подписок в случае отмены наблюдаемой)
0 голосов
/ 11 июля 2019

От: Книга Рэндалла Коутника «Создание реактивных сайтов с помощью RxJS.»:

Наблюдаемые похожи на массивы в том смысле, что они представляют коллекцию событий, но также похожи на обещания в том смысле, что они асинхронны: каждое событие в коллекции достигает некоторой неопределенной точки в будущем. Это отличается от набора обещаний (например, Promise.all) тем, что наблюдаемая может обрабатывать произвольное количество событий, а обещание может отслеживать только одну вещь. Наблюдаемое можно использовать для моделирования нажатий кнопки. Он представляет все клики, которые произойдут за время существования приложения, но клики произойдут в какой-то момент в будущем, который мы не можем предсказать.

0 голосов
/ 10 мая 2018

Используйте Promise вместо Observable, когда:

  • Вам необходимо обработать событие (будущий ответ) независимо от того, что (без отмены подписки, без отмены: после подписки), будет ответ, 100%, и вам придется обработать его, 100%, код будет исполнен)
  • Одна подписка = Одна обработка события: будет толькоодно событие от источника, поэтому будущий ответ и завершение - это одно и то же событие.

Используйте Observable вместо Обещания, когда:

  • Вы хотите иметь возможность принимать несколько событий из одного источника
  • Вам нужен обработчик «Я закончил с этим потоком событий»
  • Вы хотите иметь возможность отказаться от подписки на возможно бесконечный поток данных и повторно подписаться в любое время (это также означает, что вы можете недействительно не нужно выполнять подписку вообще: например, если ничего не произойдет в течение 10 секунд, давайте отменим подписку, никто никогда не обработает поздний ответ)
  • Вы хотите использовать RxJS "Stream API" для предварительной обработкиданные ваших ответов.

Как правило, шаблон Observable - это расширенный шаблон Promise с гораздо большим количеством инструментов и функциональных возможностей.Вы сами решаете ограничить код обещаниями или нет.Сначала это была пользовательская библиотека, затем она была включена в ES2016 .

Кроме того, я предлагаю исследовать проблему с конкретными параметрами проблемы: вам нужно, чтобы приложение было быстрее?Вы будете использовать устаревшие модули?

...