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

时间:2016-10-28 03:59:22

标签: rxjs

之间是否有任何差异
Observable.pipe(take(1)).subscribe(...)

vs

const subscription = Observable.subscribe(() => {
   // Do something, then
   subscription.unsubscribe()
})

2 个答案:

答案 0 :(得分:11)

take(1)相比,subscribe方法有许多优势:

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

    看看sample here

答案 1 :(得分:5)

在Angular2中,我发现自己使用了两种范例。

第一个在方法中最有意义,其中第二个在构造函数中更好用,在解构函数中有清理。

doThing(){
    this.store.select('thing')
        .take(1)
        .subscribe(item => {
            otherMethod(item)
        });
}

VS

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