在concat.d.ts
文件中,我们可以找到concat
运算符的以下定义:
export declare function concat<T>(this: Observable<T>, scheduler?: IScheduler): Observable<T>;
export declare function concat<T, T2>(this: Observable<T>, v2: ObservableInput<T2>, scheduler?: IScheduler): Observable<T | T2>;
export declare function concat<T, T2, T3>(this: Observable<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, scheduler?: IScheduler): Observable<T | T2 | T3>;
/* List goes on with more and mode T4, T5 ... */
所有带有微尘而不是一种通用类型的签名(即从<T1, T2>
开始(都是清楚的(至少我希望如此(:
- 在完成
T1
类型的可观察this
后,启动签名T2
的第二个可观察量:Observable.from([1,2,3]).concat(Observable.of('HI'))
- 在
this
类型的T1
可观察量完成后,启动签名T2
的第二个可观察量,之后它开始第三个类型为T3
:Observable.from([1,2,3]).concat(Observable.of('HI'), Observable.of('Hi there'))
- 等等...
但是如何翻译第一个呢?如果没有进一步的可观察量传入其中,concat
如何工作?:Observable.from([1,2,3]).concat()
在 RxJS v5.5 中引入可管道运算符之前,修补的concat
方法 -Observable.prototype.concat
- 是一种使用静态concat
工厂函数实现的便捷方法。
也就是说,这个:
Observable.from([1,2,3]).concat(Observable.from[4, 5]))
相当于这个:
Observable.concat(
Observable.from([1,2,3]),
Observable.from[4, 5])
)
可以调用Observable.concat
并传递单个参数,如下所示:
Observable.concat(
Observable.from([1,2,3])
)
这相当于这个:
Observable.from([1,2,3]).concat()
因此,当如上所述调用修补的concat
方法时,不会连接任何内容。这是有效的,但有些毫无意义,因为concat
只是从可观察的源重新发出通知。