在Rx中使用FlatMap的正确方法?

时间:2018-09-03 23:56:55

标签: angular rxjs rxjs5

使用flatMap是否正确?

const observer = Observable
    .interval(3000)
    .takeUntil(Observable.timer(10000))
    .flatMap(this.askToReadyRecordVideo);

private askToReadyRecordVideo(): Observable<any> {
    return this.requestMethods.askToReadyRecordVideo({});
}

在这一行中,我绑定了每3秒向服务器发送一次请求,直到10秒,然后调用方法this.askToReadyRecordVideo()从服务器返回数据。

当我得到成功的回应时,我就完成了。是真的吗?

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解您,但是您的代码执行以下操作: 方法askToReadyRecordVideo将每3秒调用一次,直到10秒结束为止(将有3次调用,分别为3s,6s和9s)。 您可观察的observer将发出这些服务器调用的结果。

如果要在首次成功响应后取消该过程,请添加以下内容:

.filter(resp => /* return true when resp indicates success */)
.take(1)

如果每个答案都是成功的(即错误是通过观察到的错误事件指示的),则只需省略filter行。

顺便说一句:传递回调时要小心,以免对thisaskToReadyRecordVideos中的含义感到惊讶。您可以使用flatMap(() => this.askToReadyRecordVideo())flatMap(this.askToReadyRecordVideo.bind(this))代替flatMap(this.askToReadyRecordVideo)