Ich bin ziemlich neu zu RxJs und ich würde gerne verstehen, was der beste Weg ist, mit Rx in Kombination mit Promises zu arbeiten.RxJs Erstellen Observable aus resultierenden Versprechen
Was ich erstellen möchte, ist ein Dienst in Angular, der viel wie ein Event-Dispatcher-Muster fungiert und ein Ereignis ausgibt, sobald ein Versprechen abgeschlossen ist. Was ich auch benötige ist, dass, wenn es keine (Event-) Abonnenten gibt, das Observable nie aufgerufen wird. Das letzte, was ich möchte, ist, dass nachfolgende Abonnenten der Observablen das gleiche Ergebnis erhalten, ohne eine weitere Anfrage an den Server auszulösen. Ich habe es geschafft, meine eigene Lösung zu implementieren hier:
// ... CountryService code
var COUNTRIES_LOADED = Rx.Observable
.create(function (observer) {
$http
.get('/countries')
.then(function (res) {
observer.onNext(res);
}, function (err) {
observer.onError(err);
})
.finally(function() {
observer.onCompleted();
});
})
.shareReplay();
nun jederzeit abonniere ich einen neuen „Zuhörer“, um die beobachtbaren unterliegt, gezogen werden. Alle neuen Abonnenten erhalten den Wert zwischengespeichert, ohne den Server erneut zu berühren.
Also in meinem „Verbraucher“ (Angular-Richtlinie) Ich möchte so etwas wie dies tun:
// ... countryInput directive code:
COUNTRIES_LOADED.subscribe(function (response) {
// Fill in countries into scope or ctrl
scope.countries = response.countries;
});
Irgendwelche Zukunft Abonnenten des COUNTRIES_LOADED Beobachter darf kein $ HTTP-Anforderung auslösen. Wenn die Direktive niemals auf der Seite enthalten ist, wird $ http niemals aufgerufen.
Die obige Lösung funktioniert, mir sind jedoch die möglichen Nachteile und Speicherauswirkungen dieses Ansatzes nicht bekannt. Ist das eine gültige Lösung? Gibt es einen besseren/geeigneteren Weg, dies mit RxJs zu erreichen?
Vielen Dank!
Prüfung Link rxjs mit AngularJS http://cvuorinen.net/2016/05/using-rxjs-observables-with-angularjs-1/ –
Ihre Lösung mit sieht gut aus, ich glaube nicht, dass Sie sich etwas Besseres einfallen lassen können. – estus