我有连接远程服务的任务。当它没有连接时 - 启动整个连接程序,如果已连接 - 只需完成。为此,我写了这个方法 -
public Completable execute() {
return fptrService.isConnected()
.flatMap(isConnected -> {
if (isConnected) return Single.never();
else return bluetoothService.isBluetoothAvailable();
})
.flatMap(isAvailable -> {
if (isAvailable) return bluetoothService.isBluetoothActivated();
else throw new BluetoothNotAvailableException();
})
.flatMap(isActivated -> {
if (isActivated) return bluetoothService.searchForFptr();
else throw new BluetoothNotActivatedException();
})
.flatMapCompletable(fptrService::connect);
}
在第一种情况下,当没有连接服务时 - 一切正常。但是如果在第一阶段isConnected()返回TRUE所有链停顿并且Completable完全没有完成。我该怎么做才能在第一阶段强制完成?
答案 0 :(得分:0)
.flatMap(isConnected -> {
if (isConnected) return Single.never();
else return bluetoothService.isBluetoothAvailable();
})
你告诉我的是,如果isConnected
是true
,那么永远不会发出一个项目,因此这个可观察的内容永远不会终止。
相反,您应该向下游传递Single of false
:
.flatMap(isConnected -> {
if (isConnected) return Single.just(Boolean.FALSE);
else return bluetoothService.isBluetoothAvailable();
})
// Will continue stream if `isConnected` is true
.filter(isConnected -> isConnected)
// if `isConnected` is false, then downstream operators won't be executed