【发布时间】:2019-03-19 12:58:39
【问题描述】:
我对 Rx java observables 很陌生,所以我不确定何时取消订阅。这就是我的代码实现方式
Observable<String> sampleObservable = Observable.just(accountNum);
Subscription sampleSub = sampleObservable.subscribeOn(Schedulers.io()).subscribe(new Action1<String>() {
@Override
public void call(String accountNum) {
try {
//call backend api
AccountResponse response = getAccountDetails(accountNum);
logger.debug("Account response :" + response.toString());
} catch (Exception e) {
logger.error(e.getMessage());
}
}
});
我可以在最后“sampleSub.unsubscribe()”退订吗?我在这里担心的是,如果“getAccountDetails(accountNum)”调用需要时间来完成并且代码取消订阅,那么它会取消/影响“getAccountDetails(accountNum)”调用吗?如果是,那么有没有办法仅在通话结束时取消订阅?
Observable<String> sampleObservable = Observable.just(accountNum);
Subscription sampleSub = sampleObservable.subscribeOn(Schedulers.io()).subscribe(new Action1<String>() {
@Override
public void call(String accountNum) {
try {
//call backend api
AccountResponse response = getAccountDetails(accountNum);
logger.debug("Account response :" + response.toString());
} catch (Exception e) {
logger.error(e.getMessage());
}
}
});
//unsubscribing
sampleSub.unsubscribe();
【问题讨论】:
-
不会的。你需要通过 Observable::create 和 Observable::flatMap 正确地取消你的工作。并在 Observable::create 中设置你的 cancalable。
-
如果代码本身是RxJava1,为什么会有RxJava2标签?
标签: rx-java observable rx-java2 subscription unsubscribe