调用rxjs Subject的complete()方法有什么作用?
举个例子:在takeUntil()通知者Observable上调用complete。我们为什么需要这样做,而不是只调用next()就完成了呢?
P.S. 如果这只是一种惯例,那么为什么会这样呢?
调用rxjs Subject的complete()方法有什么作用?
举个例子:在takeUntil()通知者Observable上调用complete。我们为什么需要这样做,而不是只调用next()就完成了呢?
P.S. 如果这只是一种惯例,那么为什么会这样呢?
通常在流中调用 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
此外,调用源流的complete方法是为了避免内存泄漏,因为它会删除所有已订阅观察者的引用,使垃圾回收器最终处理任何未取消订阅的Subscription
实例。