Возможно ли не получить сообщение от наблюдаемой, если я использую только complete: () =>? - PullRequest
0 голосов
/ 01 октября 2019

Просто пытается узнать больше о наблюдаемых в Angular и, читая документацию Angular, наблюдаемую , он говорит под определениями, что

"Обработчик для уведомления о завершении выполнения. Задержказначения могут по-прежнему доставляться следующему обработчику после завершения выполнения "

Поэтому мне было интересно, как это работает?

Вопрос - Означает ли это, что если я отправлюсообщение, возможно, я не получу его, если я использую только опцию complete: () =>

this.someService.getMessage().subscribe({message => {
  error: err => console.error('Observer got an error: ' + err),
  complete: () => console.log(message.whatever),
}
});

1 Ответ

0 голосов
/ 01 октября 2019

Означает ли это, что если я отправлю «сообщение», возможно, я не получу его, если использую только опцию 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'),
});

... тогда вы 'просто посмотрите следующее, независимо от того, сколько сообщений получено по этой подписке:

Наблюдатель был закрыт

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