Ich versuche Problem zu lösen, wenn ich zwei Observable, die ich in Einzelwert kombinieren möchten in Angular2 und Angularfire2RxJs Kombinieren Observable
lässt sich vorstellen, ich Bankkonto und Transaktionen von zwei Typen haben, abgehende und ankommende (es ist nur ein Anwendungsfall, den ich für den Zweck der Übung geschaffen habe). Und ich möchte sie zusammenrechnen, um den tatsächlichen Kontostand zu erhalten.
Vorlage:
....
<div *ngFor="let account of accounts | async">
{{ (transactionService.getAccountBalance(account) | async)?.balance }}
</div
....
und schließlich der Dienst, der die Daten
getAccountBalance(account){
return Observable.zip(
this.getIncomingTransactionsForAccount(account), // FirebaseListObservable
this.getOutcomingTransactionsForAccount(account) // FirebaseListObservable
, (incoming, outcoming) => {
....
let result = {
account: account.$key,
balance: someCalculatedNumber
};
console.log(result); // result is correct there
return result;
}
)
bieten sollte}
Dieses auf Firebase Endlosschleife verursacht (und keine Daten in Vorlage anzeigen). Ich habe auch versucht Observer.merge()
und einige andere, aber ich denke, ich versuche nur, absolut falsche Ansatz zu verwenden.
Schätzen Sie jede Hilfe, danke!
bearbeiten:
nur eine andere Lösung versucht, verwenden Sie einfach einen Stream alle eingehenden Transaktionen zu zählen:
public getAllIncoming(account: IAccount){
return this.getIncomingTransactionsForAccount(account)
.scan((x, y) => {
console.log(x, y);
return 1;
}, 0);
}
wieder unendlich Abfragen generiert.
EDIT2:
i auch
forkJoin versucht, wie obenpublic getAccount2Balance(account: IAccount) {
return Observable.forkJoin([
this.getIncomingTransactionsForAccount(account),
this.getOutcomingTransactionsForAccount(account)
], (incoming, outcoming) => {
...
let result = {
account: account.$key,
balance: someCalculatedNumber
};
console.log(result);
return result;
})
}
mit derselben Vorlage. Ergebnis: Wert wird nicht in der Vorlage angezeigt und console.log mit Ergebnis wird nicht gedruckt
Haben Sie versucht, Observable.forkJoin ([obs1, obs2, ...]) '? – Brad
ja, ich habe. Ich war damit auch nicht erfolgreich. Wie gesagt, ich habe nur Fehler oder unendliche API-Aufrufe bekommen. :( –
Welcher Fehler es wirft? Operator 'Observable.forkJoin()' sollte tun, was Sie brauchen. – martin