【发布时间】:2017-03-11 05:22:49
【问题描述】:
我有以下代码:
//Loop: For each user ID/Role ID, get the data
userMeta.forEach((businessRole) => {
Observable.forkJoin(
af.database.object('/roles/'+businessRole.$value),
af.database.object('/users/'+businessRole.$key)
).subscribe(
data => {
console.log("Data received");
data[1].role = data[0];
this.users.push(data[1]);
},
err => console.error(err)
);
我正在尝试使用forkJoin 订阅 2 个 observables 的结果。
由于某些原因,未显示“已收到数据”消息。
我的 userMeta 变量在 console.log 中看起来不错:
怎么了?
更新:以下代码也不返回任何内容
let source = Observable.forkJoin(
af.database.object('/roles/'+businessRole.$value),
af.database.object('/users/'+businessRole.$key)
);
let subscription = source.subscribe(
function (x) {
console.log("GOT: " + x);
},
function (err) {
console.log('Error: %s', err);
},
function () {
console.log('Completed');
});
我真正想做的是提高以下代码的性能:
//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 => {
【问题讨论】:
-
forkJoin()在两个 Observables 完成后发出一个值,所以你确定他们会这样做吗?也许其中一个以错误结束...... -
也没有错误(请参阅问题更新)。它们也必须工作,因为以前的代码是订阅中的订阅,并且它有效
-
forkJoin()不会从源 Observables 传递错误,因此即使抛出错误也不会打印任何内容。如果你想确保它不会发出错误,你需要订阅每个源 Observables。
标签: angular rxjs observable rxjs5 angularfire2