Angular 2 - 运行 2 人同时订阅
Angular 2 - Run 2 subscription in the same time
我有以下代码:
//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()
但是:
- 我很想知道如何使用 rxjs 做到这一点
- 我找不到使用
Promise.All()
获取每个可观察结果的方法
谢谢
我相信 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 是一个有用的 link,您可以在其中了解有关可观察对象以及如何使用 forkJoin 的更多信息。
这将创建两个 Observable,分别在 1000 毫秒和 900 毫秒后完成。当您 运行 这个演示时,您会看到第一个在第一个之后完成,这证明我们是并行执行的。
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()
,那就看我之前的回答 :).
我有以下代码:
//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()
但是:
- 我很想知道如何使用 rxjs 做到这一点
- 我找不到使用
Promise.All()
获取每个可观察结果的方法
谢谢
我相信 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 是一个有用的 link,您可以在其中了解有关可观察对象以及如何使用 forkJoin 的更多信息。
这将创建两个 Observable,分别在 1000 毫秒和 900 毫秒后完成。当您 运行 这个演示时,您会看到第一个在第一个之后完成,这证明我们是并行执行的。
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()
,那就看我之前的回答