RxJava在没有完成它们的情况下拉出两个可观察对象

时间:2017-07-05 12:50:18

标签: rx-java rxandroidble

我有两个observable:第一个来自库RxAndroidBle:

Observable<RxBleConnection> bluetoothObservable = RxBleClient.create(getBaseContext()).getBleDevice(macAddress)
.establishConnection(false)

哪个连接到设备并在拥有订阅者时保持连接,另一个

Observable<Response> serverObservable = Observable.fromCallable(() -> callServer())

然后我把它们拉在一起

bluetoothObservable.zipWith(serverObservable , (rxBleConnection, s) -> {
                                Log.d(TAG, "zip done");
                                return "mock result";
                            }).subscribe((s) -> {},
                                    Throwable::printStackTrace);

但在zip bluetoothObservable取消订阅后,连接立即失败。如何压缩这些可观察量并保持bluetoothObservable活着/订阅?

1 个答案:

答案 0 :(得分:2)

您可以使用以下.zip()代替:

Observable.combineLatest(
  bluetoothObservable, 
  serverObservable,
  (rxBleConnection, s) -> {
    Log.d(TAG, "combined");
    return "mock result";
  }
)
  .subscribe(
    (s) -> {},
    Throwable::printStackTrace
  )

说明:zip尝试逐个合并Observable的输出。如果其中一个将完成并且Observable之前的所有排放都匹配 - 没有必要保留对另一个Observable的订阅,因为后续的排放将不会被使用。 combineLatest只是尝试将Observable的所有排放量合并为最新对。