在线二区人妖系列_国产亚洲欧美日韩在线一区_国产一级婬片视频免费看_精品少妇一区二区三区在线

鍍金池/ 教程/ Android/ Retry
調(diào)度器 Scheduler
Empty/Never/Throw
Replay
這個(gè)頁面展示了創(chuàng)建Observable的各種方法。
ObserveOn
ReactiveX
TimeInterval
Window
本頁展示的操作符用于對(duì)整個(gè)序列執(zhí)行算法操作或其它操作,由于這些操作必須等待數(shù)據(jù)發(fā)射完成(通常也必須緩存這些數(shù)據(jù)),它們對(duì)于非常長
IgnoreElements
Distinct
Last
Start
And/Then/When
Switch
創(chuàng)建操作
Materialize/Dematerialize
CombineLatest
Catch
實(shí)現(xiàn)自己的操作符
StringObservable
Map
ConnectableObservable
Using
Take
BlockingObservable
TakeLast
Defer
RxJavaSchedulersHook
First
FlatMap
這個(gè)頁面的操作符可用于根據(jù)條件發(fā)射或變換Observables,或者對(duì)它們做布爾運(yùn)算:
Do
Repeat
Serialize
這個(gè)頁面展示的操作符可用于過濾和選擇Observable發(fā)射的數(shù)據(jù)序列。
這個(gè)頁面列出了很多用于Observable的輔助操作符
Single
Retry
從錯(cuò)誤中恢復(fù)的技術(shù)
Sample
Merge
算術(shù)和聚合操作
Range
Timestamp
RxJava Issues
From
Subscribe
Subject
Delay
Skip
SubscribeOn
Filter
按字母順序排列的全部操作符列表
Timeout
Scan
onError
Zip
RxJava文檔和教程
Publish
ElementAt
第一個(gè)例子
SkipLast
Just
Timer
Debounce
GroupBy
條件和布爾操作
這個(gè)頁面展示了可用于對(duì)Observable發(fā)射的數(shù)據(jù)執(zhí)行變換操作的各種操作符。
Introduction
rxjava-async
介紹響應(yīng)式編程
這個(gè)頁面展示的操作符可用于組合多個(gè)Observables。
ReactiveX
Connect
操作符分類
StartWith
Interval
Join
To
Buffer
RefCount
介紹
Observable

Retry

Retry

如果原始Observable遇到錯(cuò)誤,重新訂閱它期望它能正常終止

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/retry.C.png" alt="retry" />

Retry操作符不會(huì)將原始Observable的onError通知傳遞給觀察者,它會(huì)訂閱這個(gè)Observable,再給它一次機(jī)會(huì)無錯(cuò)誤地完成它的數(shù)據(jù)序列。Retry總是傳遞onNext通知給觀察者,由于重新訂閱,可能會(huì)造成數(shù)據(jù)項(xiàng)重復(fù),如上圖所示。

RxJava中的實(shí)現(xiàn)為retryretryWhen。

無論收到多少次onError通知,無參數(shù)版本的retry都會(huì)繼續(xù)訂閱并發(fā)射原始Observable。

接受單個(gè)count參數(shù)的retry會(huì)最多重新訂閱指定的次數(shù),如果次數(shù)超了,它不會(huì)嘗試再次訂閱,它會(huì)把最新的一個(gè)onError通知傳遞給它的觀察者。

還有一個(gè)版本的retry接受一個(gè)謂詞函數(shù)作為參數(shù),這個(gè)函數(shù)的兩個(gè)參數(shù)是:重試次數(shù)和導(dǎo)致發(fā)射onError通知的Throwable。這個(gè)函數(shù)返回一個(gè)布爾值,如果返回true,retry應(yīng)該再次訂閱和鏡像原始的Observable,如果返回false,retry會(huì)將最新的一個(gè)onError通知傳遞給它的觀察者。

retry操作符默認(rèn)在trampoline調(diào)度器上執(zhí)行。

retryWhen

http://wiki.jikexueyuan.com/project/rx-docs/images/operators/retryWhen.f.png" alt="retryWhen" />

retryWhenretry類似,區(qū)別是,retryWhenonError中的Throwable傳遞給一個(gè)函數(shù),這個(gè)函數(shù)產(chǎn)生另一個(gè)Observable,retryWhen觀察它的結(jié)果再?zèng)Q定是不是要重新訂閱原始的Observable。如果這個(gè)Observable發(fā)射了一項(xiàng)數(shù)據(jù),它就重新訂閱,如果這個(gè)Observable發(fā)射的是onError通知,它就將這個(gè)通知傳遞給觀察者然后終止。

retryWhen默認(rèn)在trampoline調(diào)度器上執(zhí)行,你可以通過參數(shù)指定其它的調(diào)度器。

示例代碼


Observable.create((Subscriber<? super String> s) -> {
      System.out.println("subscribing");
      s.onError(new RuntimeException("always fails"));
  }).retryWhen(attempts -> {
      return attempts.zipWith(Observable.range(1, 3), (n, i) -> i).flatMap(i -> {
          System.out.println("delay retry by " + i + " second(s)");
          return Observable.timer(i, TimeUnit.SECONDS);
      });
  }).toBlocking().forEach(System.out::println);

輸出

subscribing
delay retry by 1 second(s)
subscribing
delay retry by 2 second(s)
subscribing
delay retry by 3 second(s)
subscribing
上一篇:Delay下一篇:介紹