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
.