2016-04-03 68 views
0

目标:在每个请求返回后,使用RxJS和fire回调并行运行多个异步http请求。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请求?

回答

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) 
    ); 
} 
+0

我相信会工作,我只是觉得RxJS带有专门为此设计的方法。例如。有实例方法,如do,doOnNext,filter..etc,看起来像他们都会工作。不幸的是,我无法找到任何关于使用这种类型的功能的正确方法的文档。 – user2263572

+0

'do'操作符更多用于执行副作用('do'不允许您返回流中的任何值)。否则,'正确'的功能就是一个简单的地图(回调),我没有看到你称之为'这种类型的功能'。或者你的意思是你不想为每个请求写'map(callback)'? – user3743222

+0

实际的预期目的是将其与一系列帖子请求一起使用。在每个请求完成后,我想在应用程序的前端提供一个通知,但实际上我不需要对响应对象做任何事情。例如,并行发出10个帖子请求,每完成一个更新前的完成百分比(10%,20%,30%...等) – user2263572

相关问题