我一直在研究pipe
方法源代码,我找不到任何关于触发它作为参数的运算符的线索。
根据我在源代码中看到的,首先,pipe
方法将operations
OperatorFunction
类型而不仅仅是运算符作为参数。然后,它调用pipeFromArray
函数,将操作传递给它。在pipeFromArray
函数中,它使用operations
方法迭代reduce
。这是一个棘手的部分:我查看了map
运算符,例如mapOperation
作为参数的操作(在本例中为pipe
函数),除了返回一个获得MapOperator
的新Observable。我想知道源代码中的哪一点,操作符或操作被触发。 MapOperator
确实有call
方法,我假设它是触发器,但我看不到任何调用call
方法的实现。
答案 0 :(得分:3)
pipe
最终只会在链接运算符后返回一个observable(正如您已经注意到的那样)。一般情况下,观察者只有在实际订阅时才会被“召唤”,因此你的回答在于Observable.ts
本身;更具体地说,在subscribe
函数中:
subscribe(observerOrNext?: PartialObserver<T> | ((value: T) => void),
error?: (error: any) => void,
complete?: () => void): Subscription {
const { operator } = this;
const sink = toSubscriber(observerOrNext, error, complete);
if (operator) {
operator.call(sink, this.source);
} else {
sink.add(this.source ? this._subscribe(sink) : this._trySubscribe(sink));
}
return sink;
}