кодесурса
«Угловое

Сравнение наблюдаемых с другими методами

script1adsense2code
script1adsense3code

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

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

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

Наблюдаемые по сравнению с обещаниями

Наблюдаемые часто сравнивают с обещаниями. Вот некоторые ключевые отличия:

  • Наблюдаемые являются декларативными; расчет не начинается до подписки. Обещания выполняются немедленно при создании. Это делает наблюдаемые полезными для определения рецептов, которые можно запускать всякий раз, когда вам нужен результат.
  • Наблюдаемые дают много значений. Обещания дают один. Это делает наблюдаемые полезными для получения нескольких значений с течением времени.
  • Наблюдаемые различают цепочку и подписку. Обещания имеют только предложения .then (). Это делает наблюдаемые полезными для создания сложных рецептов преобразования, которые будут использоваться другой частью системы, без необходимости выполнения работы.
  • Observables subscribe () отвечает за обработку ошибок. Обещания подталкивают к ошибкам ребенка. Это делает наблюдаемые полезными для централизованной и предсказуемой обработки ошибок.

Создание и подписка

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

// declare a publishing operation
new Observable((observer) => { subscriber_fn });
// initiate execution
observable.subscribe(() => {
      // observer handles notifications
    });

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

// initiate execution
new Promise((resolve, reject) => { executer_fn });
// handle return value
promise.then((value) => {
      // handle result here
    });

Цепной

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

observable.map((v) => 2*v);

Обещания не делают различий между предложениями last.then (эквивалентно подписке) и предложения middle.then (эквивалентно карте).

promise.then((v) => 2*v);

отмена

Наблюдаемые подписки отменяются. Отмена подписки удаляет слушателя от получения дополнительных значений и уведомляет функцию подписчика об отмене работы.

const sub = obs.subscribe(...);
sub.unsubscribe();

Обещания не подлежат отмене.

Обработка ошибок

Наблюдаемые ошибки выполнения доставляются в обработчик ошибок подписчика, и подписчик автоматически отписывается от наблюдаемого.

obs.subscribe(() => {
throw Error('my error');
});

Обещания подталкивают к ошибкам ребенка.

promise.then(() => {
throw Error('my error');
});

Наблюдаемые по сравнению с API событий

Observables очень похожи на обработчики событий, которые используют API событий. Оба метода определяют обработчики уведомлений и используют их для обработки нескольких значений, доставленных с течением времени. Подписка на наблюдаемое эквивалентно добавлению прослушивателя событий. Одно существенное отличие состоит в том, что вы можете настроить наблюдаемое для преобразования события перед передачей события в обработчик.

Использование наблюдаемых для обработки событий и асинхронных операций может иметь преимущество большей согласованности в таких контекстах, как HTTP-запросы.

наблюдаемый API событий
Создание и отмена

// Настроить
let clicks $ = fromEvent (buttonEl, 'click');
// Начинаем слушать
пусть подписка = клики $
.subscribe (e => console.log ('Clicked', e))
// Хватит слушать
subscription.unsubscribe ();

обработчик функций (e) {
console.log («Нажал», e);
}
// Настройка и начало прослушивания
button.addEventListener ('click', обработчик);
// Хватит слушать

button.removeEventListener ('click', обработчик);
.Подписка

observable.subscribe (() => {
// обработчики уведомлений здесь

});

element.addEventListener (eventName, (event) => {
// обработчик уведомлений здесь

});
конфигурация

Прослушайте нажатия клавиш, но предоставьте поток, представляющий значение на входе.
fromEvent (inputEl, 'keydown'). pipe (
карта (e => e.target.value)

);

Не поддерживает настройку.
element.addEventListener (eventName, (event) => {
// Невозможно изменить переданное событие на другое
// значение до того, как оно попадет в обработчик

});

Предыдущая: Наблюдаемые в угловых
Далее: Практическое использование

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code