Ich möchte eine Cold Observable erstellen, die nur teure Operation starten würde, wenn es ein tatsächliches Abonnement gibt. ReplaySubject
würde gut passen, außer für den Teil, der in der Lage sein muss, eine teure Hintergrundoperation zu starten, wenn das eigentliche Abonnement gemacht wird, und nicht auf dem Observablen. Gibt es einen Weg dazu? Eine Art von onSubscribed { ... }
Methode.Ist es möglich, `ReplaySubject` zu veranlassen, eine Schließung durchzuführen, wenn man abonniert wird?
Antwort
Hier sind ein paar Optionen:
die teure Operation zu einem doOn(onSubscribe:)
Hinzufügen, die zwischen dem Observable
und das Abonnement in ist:
let observable = Observable.of(1, 2)
.doOn(onSubscribe: { _ in
expensiveOperation()
})
observable
.subscribeNext { e in
print(e)
}
Herstellung des Observable
verbindbar und Trennen des doOn(onSubscribe:)
:
let observable = Observable.of(1, 2)
.publish()
observable
.doOn(onSubscribe: { _ in
expensiveOperation()
})
.subscribe()
observable
.subscribeNext { e in
print(e)
}
observable.connect()
Sorry, aber meine Instanz von RxSwift hat keine 'doOn (onSubscribe:)' Methode. Wenn ich versuche, es zu benutzen, erhalte ich einen Fehler: "irrelevantes Argument Label" onSubscribe: 'in Anruf .doOn (onSubscribe: {_ in ... 'Ich benutze 2.6.0. Welche Version sind Sie? – courteouselk
Dies ist in 3.0 .0.alpha.1, wenn Sie nicht verwenden können, dann verwenden Sie möglicherweise die "connectable" -Methode, außer DoOn nicht verwenden, sondern wickeln Sie einfach den Verbindungsaufruf in einer Methode, wo Sie auch einen Aufruf an Ihre teure Methode – solidcell
Ich zog zu 3.0.0.β.1 (und XCode 8 GM) und es funktioniert jetzt wie erwartet.Thanks für den Vorschlag. – courteouselk
- 1. Ist es möglich, eine Suche in Excel mit ClosedXML durchzuführen?
- 2. Ist es möglich, ein Bulk-Update durchzuführen?
- 3. Ist es möglich, eine Inplace Merge ohne temporären Speicher durchzuführen?
- 4. Ist es möglich, eine Soundanalyse für iOS durchzuführen?
- 5. Ist es möglich, PDO zu veranlassen, eine ungültige Parameternummer zu ignorieren?
- 6. Ist es möglich zu sehen, was eine AWS SQS-Warteschlange abonniert hat?
- 7. Muting Schließung wird nicht kompiliert, wenn es komplizierter als eine Anweisung ist - wie zu beheben?
- 8. Ist es möglich, mit Nase mehrere Tests gleichzeitig durchzuführen?
- 9. Ist es möglich, in mstest Tests wie in MbUnit durchzuführen?
- 10. Ist es möglich Geospatial-Abfragen mit Ecto und MongoDB durchzuführen?
- 11. Ist es möglich, mehrere Klassenimporte mit ES6/Babel durchzuführen?
- 12. Ist es möglich, ein Windows Installer-Upgrade durchzuführen, wenn sich eine Datei ändert
- 13. Core-Bluetooth - Ist es möglich, einen synchronen Lesevorgang durchzuführen?
- 14. Ist es möglich, Batch-POST-API-Aufrufe durchzuführen?
- 15. Ist es möglich, mit Python API-Lesevorgänge in WordPress durchzuführen?
- 16. Ist es möglich, einen Batch-Upload auf Amazon S3 durchzuführen?
- 17. Ist es möglich, im Chrome-Onlineshop einen Teil-Rollout durchzuführen?
- 18. Ist es möglich, die Listenbearbeitung mit LINQ durchzuführen?
- 19. Ist es möglich, Joins über verschiedene Datenbanken mit LINQ durchzuführen?
- 20. Ist es möglich, T-SQL Fuzzysuche ohne SSIS durchzuführen?
- 21. Ist es möglich, statische Initialisierung von Mutexes in Windows durchzuführen?
- 22. Ist es möglich, Gurken-Tests gleichzeitig in Saucelabs durchzuführen?
- 23. Ist es möglich, Offscreen-Rendering ohne Surface in Vulkan durchzuführen?
- 24. Ist es möglich, eine Interpolationssuche durchzuführen, um einen festen Punkt in einem Array zu finden?
- 25. Sails.js/Waterline: Ist es möglich, eine "stille" Aktualisierung durchzuführen (ohne das updatedAt-Feld zu beeinflussen)?
- 26. Ist es möglich, dynamisch Seiten hinzuzufügen, wenn WiX verwendet wird?
- 27. Ist es möglich, eine Google/Yahoo/Bing-Suche durchzuführen, die auf die Metadaten "description" beschränkt ist?
- 28. Ist es möglich, eine Treemap zu erstellen, wenn eine Spalte "Wert" genannt wird
- 29. In Android, ist es möglich, eine Benachrichtigung zu erstellen, wenn eine andere App geöffnet wird?
- 30. Ist es möglich, eine ListViewGroup zu erstellen
Könnten Sie nicht ein "DoOn" auf der Observablen verwenden? http://reactivex.io/documentation/operators/do.html – sbarow
'doOn' werden ausgelöst, wenn das Observable bereits heiß ist, dh die Ereignisse erzeugt. Wenn ich 'doOn' verwenden würde, um Ereignisse zu erzeugen, würde das nie funktionieren. – courteouselk
Ja, aber darum geht es in Ihrer Frage. Führen Sie nur einige Vorgänge beim Abonnement durch. Wenn Ihr kaltes Observable beginnt. Er schlug nicht vor, dass Sie nur 'doOn', sondern' doOn' und dann das 'subscribe' verwenden. – solidcell