在 Rx 中使用 FlatMap 的正确方法?
Correct way to use FlatMap in Rx?
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()
从服务器获取 returns 数据。
收到成功回复后我就完成了。是真的吗?
我不确定我是否理解正确,但您的代码执行了以下操作:
方法 askToReadyRecordVideo
将每 3 秒调用一次,直到 10 秒结束(将有三个调用,分别在 3 秒、6 秒和 9 秒)。
您的可观察对象 observer
将发出这些服务器调用的结果。
如果您想在第一次成功响应后取消该过程,请添加以下内容:
.filter(resp => /* return true when resp indicates success */)
.take(1)
如果每个答案都成功(即错误由通过可观察对象推送的错误事件指示),则只需省略 filter
行。
顺便说一句:传递回调时要小心,以免对 this
在 askToReadyRecordVideos
中的含义产生意外。您可以使用 flatMap(() => this.askToReadyRecordVideo())
或 flatMap(this.askToReadyRecordVideo.bind(this))
代替 flatMap(this.askToReadyRecordVideo)
。
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()
从服务器获取 returns 数据。
收到成功回复后我就完成了。是真的吗?
我不确定我是否理解正确,但您的代码执行了以下操作:
方法 askToReadyRecordVideo
将每 3 秒调用一次,直到 10 秒结束(将有三个调用,分别在 3 秒、6 秒和 9 秒)。
您的可观察对象 observer
将发出这些服务器调用的结果。
如果您想在第一次成功响应后取消该过程,请添加以下内容:
.filter(resp => /* return true when resp indicates success */)
.take(1)
如果每个答案都成功(即错误由通过可观察对象推送的错误事件指示),则只需省略 filter
行。
顺便说一句:传递回调时要小心,以免对 this
在 askToReadyRecordVideos
中的含义产生意外。您可以使用 flatMap(() => this.askToReadyRecordVideo())
或 flatMap(this.askToReadyRecordVideo.bind(this))
代替 flatMap(this.askToReadyRecordVideo)
。