Из документации RxJS :
Подписка на Observable похожа на вызов функции, обеспечивающей обратные вызовы, куда данные будут доставлены.
Наблюдаемый может отправлять три типа уведомлений: Next
, Error
, Complete
.
Next
уведомление отправляет значение, такое как Число , Строка , Объект и т. д.
Error
Уведомление отправляет JavaScript Ошибка или исключение.
Complete
уведомление не отправляет значение.
И в методе subscribe()
мы предоставляем три обратных вызова для получения этих трех типов уведомлений. Порядок обратных вызовов имеет значение, они соответствуют Next
, Error
и Complete
по порядку.
В приведенном ниже коде параметр next
в первом обратном вызове может быть назван как угодно, егоимя не имеет никакого значения.
this.authService.login(this.model).subscribe(next => {
this.alertService.success('Logged in successfully');
});
Когда в первом обратном вызове нет параметров, мы не собираем значения, отправленные из наблюдаемой. Мы можем игнорировать наличие параметра, когда нам важно знать, что значение отправлено, но не заботиться о фактическом отправленном значении.
this.authService.login(this.model).subscribe(() => {
this.alertService.success('Logged in successfully');
this.router.navigate(['/home']);
}, error => {
this.alertService.danger(error);
});
В приведенном выше фрагменте кода мы не получим значенияотправлено, но оповещение срабатывает при отправке значения. Здесь у нас нет третьего обратного вызова, поэтому мы не будем уведомлены, когда наблюдаемое завершится.
Когда более уместно использовать следующий против завершения для моей наблюдаемой?
Используйте первый обратный вызов для получения значений из наблюдаемой.
Используйте второй обратный вызов для обработки любых ошибок.
Используйте третий обратный вызов для выполнения любых задач, когда наблюдаемое завершится.
Также обратите внимание, что уведомления Error
и Complete
могут появляться только один раз во время наблюдаемого выполнения, и могуттолько будь одним из них. Поэтому при возникновении ошибки третий обратный вызов не будет вызван.