Sto cercando di imparare la libreria RxJS. Uno dei casi che non capisco è descritto in this jsfiddle (codice anche sotto).RxJS combineLatest: come ottenere l'emissione dopo aver modificato un solo valore?
var A= new Rx.Subject();
var B= new Rx.Subject();
A.onNext(0);
// '.combineLatest' needs all the dependency Observables to get emitted, before its combined signal is emitted.
//
// How to have a combined signal emitted when any of the dependencies change (using earlier given values for the rest)?
//
A.combineLatest(B, function (a,b) { return a+b; })
.subscribe(function (v) { console.log("AB: "+ v); });
B.onNext("a");
A.onNext(1);
Mi piacerebbe ottenere due emittenti nella registrazione "AB". Uno dalla modifica di B a "a" (A ha già il valore 0). Un altro da modificare A a 1.
Tuttavia, solo le modifiche che si verificano dopo un subscribe sembrano avere importanza (anche se A ha un valore e quindi il risultato combinato potrebbe essere calcolato).
Devo usare "osservabili caldi" per questo o qualche altro metodo rispetto allo .combineLatest
?
Il mio problema nel codice reale (più grande di questo esempio) è che ho bisogno di fare inizializzazioni separate dopo gli abbonati, che taglia roba in due posti separati invece di avere i valori iniziali chiaramente in primo piano.
Grazie
Ottima risposta Paul, grazie! BehaviorSubject funziona davvero per me, e apprezzo molto l'ultimo paragrafo che hai scritto. Scommetto che hai ragione. I miei valori provengono da trascina mouse; andrà oltre con la documentazione Rx per capirlo più pienamente. – akauppi
@akauppi yep mouse trascinamenti sono ovviamente eventi osservabili, controlla [daEvent] (https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/fromevent.md). Nella pienezza dei tempi in cui hai più esperienza Rx, puoi imparare a mettere insieme tutto questo dalla sorgente di eventi del mouse osservabili fino al risultato finale osservabile usando solo operatori Rx senza mai dover lavorare direttamente con ' '. – Brandon
@Brandon sto imparando Rx adesso. :) Alla fine renderà pubblico il mio esperimento che combina SVG con RxJs (penso che leghi gli oggetti insieme). – akauppi