У меня есть следующий код:Observable.forkJoin() не выполняет
//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)
);
Я пытаюсь подписаться на результат 2 наблюдаемых с помощью forkJoin
.
По некоторым причинам сообщение «Данные получены» не отображается.
Мои 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 завершены, так что вы уверены, что они делают? Возможно, один из них заканчивается ошибкой ... – martin
Ошибок нет (см. Вопрос). Они также должны работать, потому что прежний код был подпиской внутри подписки, и он работал – TheUnreal
'forkJoin()' не пропускает ошибки из исходных Observables, поэтому это ничего не печатает, даже если оно вызывает ошибки. Если вы хотите убедиться, что он не испускает ошибок, вам необходимо подписаться на каждую из исходных наблюдаемых. – martin