如何订阅flatMap的结果?

时间:2019-03-17 14:45:39

标签: angular rxjs rxjs6

如何订阅flatMap的结果?

   timer(0, 2000)
      .pipe(
        flatMap(() => this.scannerService.scan(this.scanType)),
        takeWhile(res => res.errorDesc !== "SUCCESS")
      )
      .subscribe((res: IScanResponse) => {
});

我尝试在.subscribe()之后使用pipe。但我收到错误消息:

  

您提供了一个无效的对象,该对象应在其中流。您可以   提供一个Observable,Promise,Array或Iterable。

我的远程功能是:

public scan(scanType: string): Observable<any> {}

我的进口是:

import { timer } from "rxjs";
import { takeWhile } from "rxjs/operators";
import { ScannerService } from "src/app/api/ScannerService";
import { flatMap } from "rxjs/operators";

3 个答案:

答案 0 :(得分:1)

.pipe().pipe()之后,返回一个可观察的

const tm = timer(0, 2000).pipe(
     flatMap(() => this.scannerService.scan(this.scanType)),
     takeWhile(res => res)
).subscribe(res=> {
//your code
});;

答案 1 :(得分:1)

您的问题是您的类型是scan

flatMap中,您需要返回可观察对象

在这里,您返回Observable<any> {}而不是Observable<any>

答案 2 :(得分:-1)

您的代码对我来说看起来不错。可能是您在服务中导入的Observable错误。你能验证一下吗?