代码之家  ›  专栏  ›  技术社区  ›  POV

在RX中使用平面图的正确方法?

  •  0
  • POV  · 技术社区  · 6 年前

    是正确的使用方法吗 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 回复  |  直到 6 年前
        1
  •  1
  •   Hero Wanders    6 年前

    我不确定我是否正确理解您,但您的代码执行以下操作: 方法 askToReadyRecordVideo 将每3秒被呼叫一次,直到10秒结束(将有3个呼叫,分别为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) .