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

问题描述 投票:0回答:1

这是使用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()

当我成功回复时,我完成了这个。这是真的吗?

angular rxjs rxjs5
1个回答
1
投票

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

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

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

如果每个答案都成功(即错误由通过observable推送的错误事件指示),那么只需省略filter行。

顺便说一句:在传递回调时要小心,以避免thisaskToReadyRecordVideos中意味着什么。您可以使用flatMap(() => this.askToReadyRecordVideo())flatMap(this.askToReadyRecordVideo.bind(this))而不是flatMap(this.askToReadyRecordVideo)

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