Wie erstellen Sie Beobachten von der Funktion?
Möchte ich eine Funktion aufrufen (synchron) und dann mit dessen Rückgabewert als eine erste emission (anschließend Verkettung einigen anderen Anbietern, die daraus resultierenden messbaren).
Ich soll zum aufrufen dieser Funktion im Abonnement, ich kann also nicht einfach verwenden Observable.of(() => getSomeValue())
. Ich habe gesehen bindCallback
(bisher fromCallback
), aber ich glaube nicht, dass es verwendet werden kann für diese Aufgabe (korrigiert mich wenn ich falsch Liege). Ich habe gesehen start
statische operator in v4 docs, aber anscheinend ist es nicht implementiert v5 (und kein Hinweis darauf, dass Ihr auf dem Weg). RxJava hat auch fromCallable
Betreiber, was genau das macht, soweit ich weiß.
Einzige Art, wie ich denken konnte, wie diese:
Observable.create((observer: Observer<void>) => {
let val = getSomeValue();
observer.next(val);
observer.complete();
})
denen ich denke, dass genau das tut. Aber dies scheint nur so kompliziert für eine so einfache Sache, das sollte wohl auch so gewesen sein Observable.fromFunction(() => getSomeValue())
Und was wenn ich will das es läuft asynchron, wie start
Betreiber übernimmt? Wie kann ich dies in der aktuellen verion RxJS?
- Was wollen Sie erreichen? Die Verkettung der Funktionsaufrufe?
- ja, ich versuche, eine Funktion wie Saatgut und Kette beobachtbaren Betreiber auf das Ergebnis.
- Blick auf flatmap mit "abonnieren". stackoverflow.com/questions/35268482/...
- Ich denke, dass Sie noch nicht gelesen haben meine Frage genau Mein Ziel... der Funktion (die ich versuche zu starten beobachtbaren Kette mit) ist-nicht wieder eine beobachtbare, es gibt einfach zurück, gewöhnlichen Wert (sprich string), so kann ich nicht verwenden
flatmap
(oder jede andere Observable operator), auf die es offensichtlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vermeide ich eine explizite Verwendung von
Observable.create
wo immer es möglich ist, denn in der Regel ist es eine Quelle von bugs zu haben, um zu verwalten, nicht nur Ihre Veranstaltung-Ausstoß, sondern auch Ihre ZERLEGUNG Logik.Können Sie
Beobachten.aufschieben
statt. Es übernimmt eine Funktion zurückgibt, die einObservable
oder eineObservable-like
Sache (Lesen Sie: das Versprechen, Array-Iteratoren). Also, wenn Sie eine Funktion zurückgibt, die einen asynchronen Sache, es ist so einfach wie:Wenn Sie wollen, dass diese arbeiten mit einem synchronen Ergebnis dann tun:
Hinweis: wie
create
dadurch wird die Funktion erneut ausführen, auf jedes Abonnement. Dies ist dann anders sagen, das Ergebnis derObservable.bindCallback
die Geschäfte der Aufruf der Funktion Ergebnis ohne erneutes ausführen der Funktion. Also, wenn Sie brauchen, dass die Art von Verhalten, das Sie brauchen, um das entsprechendemulticasting
Betreiber.Implementierung eines
fromFunction$
dass ich in meinem Projekt:Verwendet wie:
Gibt:
Bis eine solche Umsetzung vorhanden ist.
Eigentlich denke ich, die beste option ist die Verwendung
Observable.create
denn es ist die Universelle Lösung für sowohl synchrone als auch asynchrone ursprünglichen Werte.Wenn Sie sicher sind, verwenden Sie eine synchron-Funktion, die Sie verwenden können,
startWith()
Betreiber (dies macht Sinn, nur wenn der Rückgabewert vongetSomeValue()
sollte das gleiche für alle Beobachter).Mit
Observable.bindCallback
als Quelle Beobachtbar ist natürlich machbar aber ich persönlich empfehle, es zu vermeiden, denn es macht den code sehr schwer zu verstehen, und es ist normalerweise nicht notwendig, da Sie nurObservable.create
.