【发布时间】:2017-12-04 16:30:52
【问题描述】:
我有向我发送 ping 的设备,为此我使用 observable。但在第一次 ping 之前,我们开始连接,这需要一些时间。因此我希望第一次 ping 有 10 秒超时。我是这样设计的:
public Observable<Ping> getPing() {
ConnectableObservable<Ping> observable = device.connectToDevice().publish();
Observable<Ping> firstWithTimeout = observable.take(1).timeout(10, TimeUnit.SECONDS);
Observable<Ping> fromSecondWithoutTimeout = observable.skip(1);
Observable<Ping> mergedObservable = firstWithTimeout.mergeWith(fromSecondWithoutTimeout)
.doOnDispose(() -> disconnect(bluetoothDevice))
.doOnError(error -> disconnect(bluetoothDevice));
observable.connect();
return mergedObservable;
}
为了测试我使用
Subject<Ping> observable = PublishSubject.create();
when(device.connect()).thenReturn(observable);
TestObserver<Ping> testSubscriber = TestObserver.create();
getPing.subscribe(testSubscriber);
observable.onNext(new Ping());
testSubscriber.assertValueCount(1);
尽管我立即发送 ping,但由于 TimeoutException,此测试将失败。
【问题讨论】:
-
你解决了吗?我也有同样的问题。
标签: java android rx-java observable rx-java2