RxJS:Pipe方法如何使操作符作为内部参数工作?

RxJS:Pipe方法如何使操作符作为内部参数工作?,rxjs,Rxjs,我一直在研究pipemethod源代码,但找不到任何关于触发作为参数的运算符的线索。 根据我在源代码中看到的,首先,pipe方法将操作作为参数,它是OperatorFunction类型,而不仅仅是操作符。然后,它调用pipeFromArray函数,将操作传递给它。在pipeFromArray函数中,它使用reduce方法迭代操作。这里是一个棘手的部分:我研究了map操作符,例如,pipe作为参数的操作(在本例中为mapOperation函数),除了返回一个新的可观察对象之外,什么也不做,该对象将

我一直在研究
pipe
method源代码,但找不到任何关于触发作为参数的运算符的线索。
根据我在源代码中看到的,首先,
pipe
方法将
操作
作为参数,它是
OperatorFunction
类型,而不仅仅是操作符。然后,它调用
pipeFromArray
函数,将操作传递给它。在
pipeFromArray
函数中,它使用
reduce
方法迭代
操作。这里是一个棘手的部分:我研究了
map
操作符,例如,
pipe
作为参数的操作(在本例中为
mapOperation
函数),除了返回一个新的可观察对象之外,什么也不做,该对象将具有
MapOperator
。我想知道在源代码的哪一点,操作符或操作被触发
MapOperator
确实有
call
方法,我假设该方法是触发器,但我看不到任何调用
call
方法的实现。

pipe
最终只会在链接了操作符之后返回一个可观察的值(正如您已经注意到的)。一般来说,一旦你实际订阅了可观察对象,它就会被称为,因此你的答案就在于
Observable.ts
本身;更具体地说,在函数中:

subscribe(observer或ext?:PartialObserver |((值:T)=>void),
错误?:(错误:任意)=>无效,
完成?:()=>void):订阅{
const{operator}=这个;
const sink=toSubscriber(observerOrNext,error,complete);
if(操作员){
接线员呼叫(接收器,此.source);
}否则{
sink.add(this.source?this._subscribe(sink):this._trySubscribe(sink));
}
回流槽;
}

我有点困惑,因为根据他们在源代码中的注释,>pipe返回所有操作符的可观察结果,这些操作符都是按照它们传入的顺序被调用的。因此我认为
管道中的链式操作符在
订阅
之前一个接一个地被调用,而链式中的最后一个操作符产生的最后一个可观察值等待
订阅
函数。我错了吗?您可以在操作员的
call
实现中看到,他们依次调用源observable上的
subscribe
,从而创建订阅链
pipe
将它们链接在一起,但操作符只在订阅后执行。正如您所解释的,
subscribe
方法调用操作符的调用方法,并通过
source
连接不断向上移动,在流的末尾,将出现类似[MapSubscriber、FilterSubscriber等]在订阅数组中,如果它类似于源$.pipe(map(),filter()).subscribe()),如果我得到的是正确的。最后一个问题是:我在哪里可以看到在每个订阅者中调用
\u next
方法的实现?在
subscribe
方法中,它只是简单地添加订阅,但我看不到
\u next
方法是如何在链中触发的。@dongbinikim
\u next
,它是由公共
next
包装的内部方法,获取订阅服务器作为目标参数,并以这种方式转发通知。是的,我知道,但我要问的是,在代码中,下一个方法在哪里调用?我想知道代码中如何/什么/何处调用触发链中每个运算符逻辑的方法