如何将observable转换为它的类型?

时间:2017-12-13 19:30:37

标签: javascript rxjs

如果我有.lib,有没有办法将其转换为T?

Observable<T>

如何将let sum$: Observable<number>; let sumNum: number; 设置为sumNum中的值?

我发现sum$会这样做,但它会创建一个不是我想要的订阅。我希望它设置一次值而不再订阅。

1 个答案:

答案 0 :(得分:1)

  

如果我有一个Observable是否有办法将其转换为T?

如果我理解正确,你想要的东西(非工作!)

const value = obs$.first().value();

答案是:不,那是不可能的。 Observables是数据流随着时间的推移,所以这样的函数必须阻塞(这是一个可怕的想法 - 如果obs$需要五分钟发出怎么办?)。阻止以及如何避免它就是承诺之类的事情诞生的原因。封锁很糟糕。

正确的解决方案是评论中提到的:

obs$.first().subscribe(value => this.value = value);

这将创建一个在obs$发出的时刻取消订阅的订阅,因为在这种情况下first()会导致链完成。所以没有什么可以害怕这个解决方案。

作为一个小附录,BehaviorSubject确实附带了一个同步返回最新值的getValue()方法。这可以得到保证,因为它类似于具有初始值的ReplaySubject,即,在任何给定的时间点它具有至少一个发射。但是,诉诸BehaviorSubject#getValue() 通常表示做错了。