Angular 6 - Наблюдаемое объяснение на простом английском - PullRequest
0 голосов
/ 24 сентября 2018

Я ищу простое объяснение на английском языке о том, что такое Observable в RXJS.

Для чего он может быть использован, и любые полезные объяснения: видео ссылки, учебные пособия, примеры использования, примеры или что-то ещедействительно.

Пока что ничего, что я нашел на Udemy, Todd Motto, Youtube, на официальном веб-сайте Angular, не щелкнуло со мной, и я просто хочу получить базовое объяснение вышеизложенного, если это возможно.

Пока все, что я знаю, это то, что вы можете подписаться на них с помощью наблюдателя.Это просто переменная другого типа?

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 18 июля 2019

Для смеха, эта вымышленная история только для таких чайников, как я, чтобы понять:

После 7 лет брака замечательный Джон все еще влюблен в прекрасную Кейт, но все подруги Кейт советуют ей следить заДжон, который работает все больше и больше часов в офисе

«Я перезвоню, занята, работаю над этим».Итак, ЗВОНОК - это то, что Кейт всегда слышит, когда зовет Джона, своего мужа, для чего-то.Большую часть времени она была удовлетворена, иногда ей было жаль.Хотя иногда нелегко следить за вещами.

Джон любит Кейт, он улучшает формулировку и обработку, говоря: «Я ОБЕЩАЮ (делать то, о чем просит Кейт)!» ТО снова большую часть времени Кейт довольна, и она устанавливает safenet для CATCH неожиданного ответа, лучшего способа организации, чем Callbacks.

Кейт очень довольнаДжон, но ее подруги все еще сплетничают об этом, особенно продвигаются технологии.Поэтому они все говорят Кейт: «Тебе лучше НАБЛЮДАТЬ ...» Джон теперь НАБЛЮДАЕМ Кейт, которая шутит с ее дорогой, что она ПОДПИСЫВАЕТСЯ для него, то есть Джон теперь может ответитьнепрерывно, ответ может быть потоковым!Юльп, вместо одного ответа на запрос, он устанавливает маленькую камеру на своем столе, чтобы держать ее в курсе все время.Например, Кейт заботится о своей диете, он сообщал: «Дорогой, у меня только кусочек чизкейка и яблоко на завтрак»,… «Дорогой, у меня был вкусный обед из…» Прекрасно!

КОНЕЦ

0 голосов
/ 24 сентября 2018

Мое понимание Observable похоже на то, как вы спрашиваете Сири (или другой материал) «какая погода завтра».Siri даст вам ответ наверняка, и тот «предмет» внутри Siri, который содержит ответ, «Observable».

Ниже может быть полезна ссылка - Демистификация Rxjs Observable

https://medium.com/@AnkurRatra/demystifying-rxjs-observable-467c52309ac

0 голосов
/ 24 сентября 2018

Давайте начнем с обещаний

В Javascript Promises - это общий шаблон, используемый для элегантной обработки асинхронного кода.Если вы не знаете, что это за обещания, начните там.Они выглядят примерно так:

todoService.getTodos() // this could be any async workload
.then(todos => {
  // got returned todos
})
.catch(err => {
  // error happened
})

Важные части:

todoService.getTodos() // returns a Promise

Давайте пока забудем о том, как работает getTodos().Важно знать, что многие библиотеки поддерживают Promises и могут возвращать обещания для асинхронных запросов, таких как http-запросы.

Объект Promise реализует два основных метода, облегчающих обработку результатов асинхронной работы.Эти методы .then() и .catch().then обрабатывает «успешные» результаты, а catch - обработчик ошибок.Когда обработчик then возвращает данные, это называется resolving обещанием, а когда он выдает ошибку обработчику catch, это называется rejecting.

.then(todos => { // promise resolved with successful results })
.catch(err => { // promise rejected with an error }) 

Крутая вещьесть, then и catch также возвращают обещания, так что вы можете цепочка их так:

.then(todos => {
  return todos[0]; // get first todo
})
.then(firstTodo => {
  // got first todo!
})

Вот подвох: Обещания могут быть разрешены только ИЛИ ОДИН РАЗ

Это хорошо работает для таких вещей, как http-запросы, потому что http-запросы в основном выполняются один раз и возвращаются один раз (успех или ошибка).

Что происходит, когда вам нужен элегантный способ потоковая асинхронная передача данных?Подумайте видео, аудио, данные в режиме реального времени, сообщения в чате.Было бы здорово иметь возможность использовать обещания для настройки обработчика, который продолжает принимать данные при их потоковой передаче:

// impossible because promises only fire once!
videoService.streamVideo()
.then(videoChunk => { // new streaming chunk })

Добро пожаловать в реактивный шаблон

В двух словах: Обещаниячтобы асинхронизировать отдельные запросы, что такое Observables для асинхронной потоковой передачи данных.

Это выглядит примерно так:

videoService.getVideoStream() // returns observable, not promise
.subscribe(chunk => {  // subscribe to an observable
   // new chunk
}, err => {
  // error thrown
});

Выглядит похоже на шаблон обещания, верно?Одно главное отличие между наблюдаемыми и обещаниями.Observables продолжают «излучать» данные в «подписку» вместо использования одноразовых обработчиков .then() и .catch().

Клиентская библиотека Angular http возвращает наблюдаемые по умолчанию, даже если вы думаете, что http соответствует обещанию одноразового использованиякартина лучше.Но классная вещь в реактивном программировании (например, rxJS) состоит в том, что вы можете сделать наблюдаемые из других вещей, таких как события щелчка или любой произвольный поток событий.Затем вы можете объединить эти потоки вместе, чтобы сделать довольно интересные вещи.

Например, если вы хотите обновлять некоторые данные каждый раз, когда нажимается кнопка обновления И каждые 60 секунд, вы можете настроить что-то вроде этого:

const refreshObservable = someService.refreshButtonClicked(); // observable for every time the refresh button gets clicked
const timerObservable = someService.secondsTimer(60); // observable to fire every 60 seconds

merge(
  refreshObservable,
  timerObservable
)
.pipe(
  refreshData()
)
.subscribe(data => // will keep firing with updated data! )

Довольно элегантный способ справиться со сложным процессом!Реактивное программирование - довольно большая тема, но этот - довольно хороший инструмент, чтобы попытаться визуализировать все полезные способы, которыми вы можете использовать observables для создания классных вещей.

примечание: этонепроверенный псевдокод, написанный только для иллюстрации

0 голосов
/ 24 сентября 2018

Это похоже на событие, подписавшись, вы говорите: «Дайте мне знать, когда это произойдет ...» .. так что, скажем, вы делаете http-запрос, вы на самом деле не знаете, сколько времени это займет, поэтому наблюдаемое - это простозаполнитель или событие, на которое вы можете подписаться, в котором говорится, что когда это произойдет, сделайте что-нибудь.То есть, когда этот HTTP-запрос возвращается, когда бы это ни случилось, прочитайте значение.Функция, на которую вы подписаны, будет запущена, когда вернется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...