我想訂閱一個observable,但在某些邏輯中,我將重新訂閱它,如果我不想爲它編寫一些特殊的邏輯,那麼當我添加一個新的訂閱或當我添加一個新的訂閱時,如何處理最後的訂閱訂閱它我可以知道這個觀察者是否已經訂閱?RxSwift如何只訂閱一次觀察值?
0
A
回答
1
爲什麼你想這樣做?你特別想解決什麼問題?
處理訂閱的常用方法是使用dispose包。
func subscribeMyObservable()
{
disposeBag = DisposeBag()
myObservable
.subscribe(onNext: { print("Whatever") }
.addDisposableTo(disposeBag)
}
請注意,我是如何在訂閱前每次重新創建一次性的?這將擺脫以前的訂閱。
0
.switchLatest()運營商是你的朋友
let eventObservableWrapper = PublishSubject<Observable<MyEvent>>()
let eventObservable = eventObservableWrapper.switchLatest() // use this one for subscriptions
// to switch to another observable, call -
eventObservableWrapper.onNext(someNewEventObservable)
看到更多關於如何開關在這裏工作 - http://reactivex.io/RxJava/javadoc/rx/Observable.html#switchOnNext(rx.Observable)
0
你要什麼做的,如果我可不是錯的是認購和一旦物品排出,不會取消訂閱。
如果這是你想要的,你可以使用relay
,你永遠不會取消訂閱。
/**
* ReplayRelay it works just like hot observables, once that an observer subscribe, the Relay will replay all items already emitted
* to another observer.
* it should return 1,2,3,4,5 for both observers.
*/
@Test
public void testReplayRelay() {
ReplayRelay<String> relay = ReplayRelay.create();
relay.subscribe(result -> System.out.println("Observer1:" + result));
relay.call("1");
relay.call("2");
relay.call("3");
relay.subscribe(result -> System.out.println("Observer2:" + result));
relay.call("4");
relay.call("5");
}
您可以在這裏看到https://github.com/politrons/reactive/blob/master/src/test/java/rx/relay/Relay.java
0
最簡單的解決方案的更多exmaples你正在尋找的東西確實是他們爲這一點提供的方法 - func take(_ count: Int)
。
這裏是一個遊樂場樣本:
import RxSwift
var variable = Variable(1)
variable.asObservable().take(1).subscribe(
onNext: { print("onNext: \($0)") },
onError: { print("onError: \($0)") },
onCompleted: { print("onCompleted") },
onDisposed: { print("onDisposed") })
variable.value = 2
print("done")
的結果是:
onNext: 1
onCompleted
onDisposed
done
是的,這是有用的,你想通過流來過濾事件的地方,在一個位置存儲訂閱尷尬。
相關問題
- 1. 如何觀察RxSwift
- 2. 訂閱可觀察值
- 3. 只能調用一次的可觀察訂閱方法
- 4. 如何從訂閱中返回觀察值以訂閱?
- 5. 如何創建可觸發的可觀察訂閱,只觸發一次?
- 6. RxJava如何訂閱可觀察對象
- 7. 在RxSwift中處理一次性觀察值的正確方法
- 8. RxSwift訂閱ControlEvent
- 9. 訂閱可觀察內容
- 10. 出版物訂閱觀察
- 11. 訂閱可觀察輸入
- 12. 如何取消訂閱AngularFire數據庫觀察/訂閱?
- 13. RxSwift多訂閱一個observable
- 14. 爲什麼RxSwift訂閱只在第一次啓動viewWillAppear運行一次?
- 15. RxSwift toArray()不訂閱
- 16. RxSwift - 訂閱方法
- 17. 選擇器可觀察 - RxSwift
- 18. 使用RxSwift觀察UITextField.editing
- 19. 如何從訂閱中返回觀察值
- 20. 如何使用Angular2中的takeUntil取消訂閱觀察值
- 21. RxJava等待一個觀察者與訂閱者等待另一個觀察者與其他訂閱者
- 22. RxJava2:第一次訂閱和最後一次取消訂閱觀察者的PublishProcessor回調
- 23. 取消可觀察訂閱並等待觀察者完成
- 24. RxSwift:如何讓一個可觀察觸發另一個?
- 25. 從可觀察主題推/置值,不更新訂閱可觀察
- 26. 在另一個可觀察的訂閱中嵌套可觀察訂閱是否可以接受
- 27. 角2可觀察訂閱不工作
- 28. 等待可觀察訂閱Angelar2
- 29. 取消訂閱動態觀察對象
- 30. Angular 2可觀察訂閱顯示undefined
謝謝你的回答。有一些邏輯我需要訂閱動態盟友,所以有些時候可能會重新訂閱一個可觀察的,所以我只是覺得也許有一些特殊的可觀察的,如果有新的訂閱,它會自動取消或者其他一些聰明的方式,現在,我的解決方案就像你的解決方案。 – Bruno
你可以看看'takeWhile'或'takeUntil'運營商,但我認爲最好的方式就是像我描述的那樣。 – Odrakir