(RxJs) Цель "завершения" субъекта rxjs? - PullRequest
0 голосов
/ 25 сентября 2018

Какова цель вызова complete () для субъекта rxjs?

Например: вызов завершения для уведомителя takeUntil () Observable.Почему мы должны это делать, а не просто вызывать next () и покончить с этим?

PS Если это просто соглашение, почему это так?

1 Ответ

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

complete обычно вызывается для субъектов, чтобы отправить событие completed через поток.Это сделано для того, чтобы вызвать наблюдателей, которые ждут этого уведомления.Например:

var subject = new BehaviorSubject<int>(2);
var subjectStream$ = subject.asObservable();
var finalize$ = subjectStream$.pipe(finalize(()=> console.log("Stream completed")));
var fork$ = forkJoin(subjectStream$,of(1));

....

finalize$.subscribe(value => console.log({value})); 
//output: 2, notice that "Stream completed" is not logged.
fork$.subcribe(values => console.log({values}); 
// no output, as one of the inner forked streams never completes

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

...