假設(shè)我們工作的是一個時效性的環(huán)境,我們溫度傳感器每秒都在發(fā)射一個溫度值。我們想讓它每隔兩秒至少發(fā)射一個,我們可以使用timeout()
函數(shù)來監(jiān)聽源可觀測序列,就是在我們設(shè)定的時間間隔內(nèi)如果沒有得到一個值則發(fā)射一個錯誤。我們可以認為timeout()
為一個Observable的限時的副本。如果在指定的時間間隔內(nèi)Observable不發(fā)射值的話,它監(jiān)聽的原始的Observable時就會觸發(fā)onError()
函數(shù)。
Subscription subscription = getCurrentTemperature()
.timeout(2,TimeUnit.SECONDS)
.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.d("RXJAVA","You should go check the sensor, dude");
}
@Override
public void onNext(Integer currentTemperature) {
updateDisplay(currentTemperature)
}
});
和sample()
一樣,timeout()
使用TimeUnit
對象來指定時間間隔。
下圖中展示了一旦Observable超過了限時就會觸發(fā)onError()
函數(shù):因為超時后它才到達,所以最后一個元素將不會發(fā)射出去。
http://wiki.jikexueyuan.com/project/rxjava/images/chapter4_14.png" alt="" />