【问题标题】:Rx js understanding the lift methodrx js理解lift方法
【发布时间】:2017-05-04 05:16:46
【问题描述】:

我想创建一个新的运算符,我在documentation 中发现其中一种方法是执行以下操作:

class MyObservable extends Observable {
  lift(operator) {
    const observable = new MyObservable()
    observable.source = this;
    observable.operator = operator;
    return observable;
  }

  // put it here .. or ..
  customOperator() {
    /* do things and return an Observable */
  }
}

// ... put it here...
MyObservable.prototype.mySimpleOperator = mySimpleOperator;

我不明白lift 方法是什么以及这里发生了什么,有人可以帮忙吗?

【问题讨论】:

标签: javascript rxjs


【解决方案1】:

lift 在 RxJS 5 内部一直使用。lift 的原理是您准备一个新的 Observable,它在订阅时将按照操作员定义的方式转发事件。 Paul Taylor (https://youtu.be/QhjALubBQPg?t=19m) 有一个很好的视频。电梯是一个非常基本的构建块。

除了创建一个新类——扩展 Observable——你也可以只创建 Operator 本身。然后,操作员的用户可以通过以下方式调用它:

Observable.of(1, 2, 3)
  .lift(new MyCustomOperator)
  .subscribe()

这意味着没有人必须知道 Observable API 中还有另一个运算符可用,而是看到它是在其他地方定义的东西。

理想情况下你可以写

someObservable::myCustomOperator();

但不幸的是,bind-operator 可能很长一段时间/永远不会发生,所以.lift(operator) 似乎是最明确/最干净的方式。

【讨论】:

  • 我从来没有想过它可以替代绑定运算符,有了信息,这很容易吗?