我有以下代码:
//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()
要求所有源Observable至少发出一次并完成。
以下演示按预期完成:
const source = forkJoin(
from([1,2,3]),
from([9,8,7,6])
).subscribe(
x => console.log('GOT:', x),
err => console.log('Error:', err),
() => console.log('Completed')
);
现场演示:https://stackblitz.com/edit/rxjs-urhkni
GOT: 3,6
Completed
2019年1月:已针对RxJS 6更新
关于angular - Observable.forkJoin()不执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40303012/