我有以下代码:
//Subscription 3: role ID to role Name
af.database.object('/roles/'+businessRole.$value)
.subscribe((roleData) => {
//Subscription 4: Get user info
af.database.object('/users/'+businessRole.$key).subscribe(user => {
其中包含订阅内的订阅。
这里的问题是应用程序在运行第二个之前等待第一个应用程序。我想一次执行它们,并得到每个的结果。我怎么能这样做?
之前我一直在使用Promise.All()
但是:
Promise.All()
由于
答案 0 :(得分:4)
我相信Observable.forkJoin正是你需要在你的情况下使用的。
这是你的代码使用forkJoin的样子:
Observable.forkJoin(
this.http.get('/roles/'+businessRole.$value).map((response: Response) => res.json()),
this.http.get('/users/'+businessRole.$key).map((response: Response) => res.json())
).subscribe(data => {
data[0] // this will contain roleData
data[1] // this will contain user
},
error => console.log(error));
This是一个有用的链接,您可以在其中了解有关observable以及如何使用forkJoin的更多信息。
答案 1 :(得分:1)
这会创建两个在1000毫秒和900毫秒后完成的Observable。当你运行这个演示时,你会看到第一个完成第一个演示后,在第一个演示之后,证明我们并行执行了这些演示。
let obs1 = Observable.of('HTTP Response 1').delay(1000);
let obs2 = Observable.of('HTTP Response 2').delay(900);
console.log('Start');
obs1.merge(obs2)
.subscribe(val => console.log(val), undefined, () => console.log('Completed'));
查看现场演示:http://plnkr.co/edit/hzmpclxDkIhnfTYcWXd5?p=preview
打印到控制台:
Start
HTTP Response 2
HTTP Response 1
Completed
如果您需要forkJoin()
,请参阅我之前的回答Observable.forkJoin() doesn't executes:)。