【问题标题】:Purpose of "completing" an rxjs Subject?“完成”一个 rxjs 主题的目的是什么?
【发布时间】:2018-09-25 18:00:14
【问题描述】:

在 rxjs Subject 上调用 complete() 的目的是什么?

例如: 在 takeUntil() 通知程序 Observable 上调用完成。为什么我们需要这样做,而不仅仅是调用 next() 并完成它?

附:如果只是约定俗成,为什么会这样?

【问题讨论】:

    标签: javascript rxjs observable subject


    【解决方案1】:

    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 实例。

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多