Rxjs Observable.take(1)vs Subscription.unsubscribe()

Tuo*_* Le 17 rxjs

之间有什么区别吗?

Observable.pipe(take(1)).subscribe(...)
Run Code Online (Sandbox Code Playgroud)

VS

const subscription = Observable.subscribe(() => {
   // Do something, then
   subscription.unsubscribe()
})
Run Code Online (Sandbox Code Playgroud)

Mei*_*eir 15

take(1)方法具有许多优点subscribe:

  1. 代码可读性(和优雅).
  2. 第二种方法要求您保留和管理额外的变量.
  3. 第二种方法不会调用完整的处理程序.这是因为.take(1)实际上创建了一个新的observable,它可能产生一个项目并完成.
  4. 第二种方法适用于采用单个元素的微不足道的情况,但是如果你需要多于1,那么take(4)将保持简单,而第二种方法将难以编码.

第3项是与rxjs相关的项目,其他项目与编码风格有关.

看看这里样本.


小智 5

在Angular2中,我发现自己使用这两种范式.

第一个在方法内部最有意义,其中第二个在构造函数中更好地使用,在解构器中进行清理.

doThing(){
    this.store.select('thing')
        .take(1)
        .subscribe(item => {
            otherMethod(item)
        });
}
Run Code Online (Sandbox Code Playgroud)

VS

class SomeClass{
    public val;
    private sub;
    constructor(){
        this.sub = this.store.select('thing')
            .subscribe(item => {
                this.val = item
            });
    }
    ngDestroy() {
        this.sub.unsubscribe()
    }
}
Run Code Online (Sandbox Code Playgroud)