【问题标题】:RxJS: Updating client on each return of parallel http requestsRxJS:在每次返回并行 http 请求时更新客户端
【发布时间】:2016-04-03 19:47:17
【问题描述】:

目标:使用 RxJS 并行运行多个异步 http 请求,并在每个请求返回后触发回调。

例如:

getSomeData() {
    Observable.forkJoin(
        this.http.get('/somethingOne.json').map((res:Response) => res.json()),
        this.http.get('/somethingTwo.json').map((res:Response) => res.json())
    ).subscribe(
      data => {
        this.somethingOne = data[0]
        this.somethingTwo = data[1]
      },
      err => console.error(err)
    );
}

上面的代码将并行运行 http.get 请求并将响应映射到 json,但是在每个 http 响应上,我都希望调用我创建的函数。有没有什么方法可以将回调函数传递给传递给 forkJoin 方法的 http 请求?

【问题讨论】:

    标签: javascript http angular rxjs observable


    【解决方案1】:

    这行得通吗?只需在当前选择器函数的主体中执行您的函数。 (这里可能有一些语法错误,因为我不使用 ES6)。包括两个版本,具体取决于您希望如何使用该功能,但想法很明确:使用您的 map 选择器功能来运行您想要的任何逻辑。

    getSomeData() {
        Observable.forkJoin(
            this.http.get('/somethingOne.json').map((res:Response) => {myFunction(res); return res.json()}),
            this.http.get('/somethingTwo.json').map((res:Response) => myOtherFunction(res.json()))
        ).subscribe(
          data => {
            this.somethingOne = data[0]
            this.somethingTwo = data[1]
          },
          err => console.error(err)
        );
    }
    

    【讨论】:

    • 我相信这会奏效,我只是认为 RxJS 带有专门为此目的设计的方法。例如。有一些实例方法,例如 do、doOnNext、filter..etc,它们似乎都可以工作。不幸的是,我找不到任何有关用于此类功能的正确方法的文档。
    • do 运算符更适用于执行副作用(do 不允许您在流中返回任何值)。否则,“正确”功能是一个简单的映射(回调),我看不到您所说的“这种功能”。或者你的意思是你不想为每个请求写map(callback)
    • 实际的预期目的是将它与一系列发布请求一起使用。在每个请求完成后,我想在我的应用程序的前端提供一个通知,但我实际上不需要对响应对象做任何事情。例如,并行发出 10 个 post 请求,并在每个请求后更新前端完成百分比(10%、20%、30%...等)
    • 那么是的,do 就是你想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    相关资源
    最近更新 更多