如何订阅flatMap的结果?

问题描述 投票:-1回答:3

如何订阅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";
angular rxjs rxjs6
3个回答
1
投票

您的问题是scan返回的类型

flatMap中,你需要返回一个Observable。

在这里你返回Observable<any> {}而不仅仅是Observable<any>


1
投票

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

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

-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.