Означает ли это, что если я отправлю «сообщение», возможно, я не получу его, если использую только опцию complete
Обработчик complete
не предназначендля потребления любых сообщений, которые отправляются. Он предназначен только для ответа, когда Наблюдаемый отмечен как завершенный. Вот как это можно использовать:
this.someService.getMessage().subscribe({
next: message => console.log(message);
error: err => console.error('Observer got an error: ' + err),
complete: () => console.log('Observer was closed'),
});
Так что, если наблюдаемый в приведенном выше примере испустил одно сообщение ("привет") до того, как был отмечен как завершенный, вы увидите:
привет
Обозреватель был закрыт
Затем есть интересный бит:
Задержанные значения могут продолжать доставляться следующему обработчику после завершения выполнения
Это в основном означает, что в некоторых (относительно редких) случаях Наблюдаемое может быть помечено как завершенное до того, как появится последнее сообщение. Это может выглядеть так:
Наблюдатель был закрыт
привет
Это было бы странно и неожиданно, поэтому они хотят убедиться,это упомянуто в документации, поэтому вы учитываете такую возможность в своих обработчиках.
Конечно, если вы опустите обработчик next
следующим образом:
this.someService.getMessage().subscribe({
error: err => console.error('Observer got an error: ' + err),
complete: () => console.log('Observer was closed'),
});
... тогда вы 'просто посмотрите следующее, независимо от того, сколько сообщений получено по этой подписке:
Наблюдатель был закрыт