Rxjs Concat示例

时间:2019-03-07 11:59:58

标签: angular rxjs

现在已经使用rxjs一段时间了,但是不了解某些东西,其中之一就是concat。 rxjs site中的示例:

    const sourceOne = of(1, 2, 3);
    //emits 4,5,6
    const sourceTwo = of(4, 5, 6);
    //emit values from sourceOne, when complete, subscribe to sourceTwo
    const example = sourceOne.pipe(concat(sourceTwo));

但是,在我的角度项目中,这给了我这个错误:

TS2345: Argument of type 'Observable<number>' is not assignable to parameter of type 'OperatorFunction<number, {}>'.
      Type 'Observable<number>' provides no match for the signature '(source: Observable<number>): Observable<{}>'.

不知道为什么,有人可以启发我吗?谢谢。

2 个答案:

答案 0 :(得分:1)

该示例工作正常。我在stackblitz上重新创建了它:https://stackblitz.com/edit/rxjs-6z6pjk?file=index.ts

代码:

import { of } from 'rxjs';
import { map, concat } from 'rxjs/operators';

const sourceOne = of(1, 2, 3);
//emits 4,5,6
const sourceTwo = of(4, 5, 6);

//emit values from sourceOne, when complete, subscribe to sourceTwo
const example = sourceOne.pipe(
  concat(sourceTwo))
  .subscribe(x => console.log(x));

package.json

{
  "name": "typescript-5i4anz",
  "version": "0.0.0",
  "private": true,
  "dependencies": {
    "rxjs": "6.4.*"
  }
}

答案 1 :(得分:1)

您输入的是错误的 A B C D E A 0 1 0 1 0 B 0 0 1 0 1 C 0 0 0 1 0 D 0 0 0 0 1 E 1 1 1 0 0 。您想将其用作运算符,因此必须导入

concat

您要从import { concat } from 'rxjs/operators'; 导入concat,这是一种可以观察到的创建方法,而不是运算符。

它将在更高版本的RxJS中重命名,因为它太容易引起误解:https://github.com/ReactiveX/rxjs/issues/3927