對(duì)原始Observable的一個(gè)鏡像,如果過(guò)了一個(gè)指定的時(shí)長(zhǎng)仍沒(méi)有發(fā)射數(shù)據(jù),它會(huì)發(fā)一個(gè)錯(cuò)誤通知
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/timeout.c.png" alt="Timeout" />
如果原始Observable過(guò)了指定的一段時(shí)長(zhǎng)沒(méi)有發(fā)射任何數(shù)據(jù),Timeout
操作符會(huì)以一個(gè)onError
通知終止這個(gè)Observable。
RxJava中的實(shí)現(xiàn)為timeout
,但是有好幾個(gè)變體。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/timeout.1.png" alt="Timeout" />
第一個(gè)變體接受一個(gè)時(shí)長(zhǎng)參數(shù),每當(dāng)原始Observable發(fā)射了一項(xiàng)數(shù)據(jù),timeout
就啟動(dòng)一個(gè)計(jì)時(shí)器,如果計(jì)時(shí)器超過(guò)了指定指定的時(shí)長(zhǎng)而原始Observable沒(méi)有發(fā)射另一項(xiàng)數(shù)據(jù),timeout
就拋出TimeoutException
,以一個(gè)錯(cuò)誤通知終止Observable。
這個(gè)timeout
默認(rèn)在computation
調(diào)度器上執(zhí)行,你可以通過(guò)參數(shù)指定其它的調(diào)度器。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/timeout.2.png" alt="Timeout" />
這個(gè)版本的timeout
在超時(shí)時(shí)會(huì)切換到使用一個(gè)你指定的備用的Observable,而不是發(fā)錯(cuò)誤通知。它也默認(rèn)在computation
調(diào)度器上執(zhí)行。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/timeout.3.png" alt="Timeout" />
這個(gè)版本的timeout
使用一個(gè)函數(shù)針對(duì)原始Observable的每一項(xiàng)返回一個(gè)Observable,如果當(dāng)這個(gè)Observable終止時(shí)原始Observable還沒(méi)有發(fā)射另一項(xiàng)數(shù)據(jù),就會(huì)認(rèn)為是超時(shí)了,timeout
就拋出TimeoutException
,以一個(gè)錯(cuò)誤通知終止Observable。
這個(gè)timeout
默認(rèn)在immediate
調(diào)度器上執(zhí)行。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/timeout.4.png" alt="Timeout" />
這個(gè)版本的timeout
同時(shí)指定超時(shí)時(shí)長(zhǎng)和備用的Observable。它默認(rèn)在immediate
調(diào)度器上執(zhí)行。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/timeout.5.png" alt="Timeout" />
這個(gè)版本的time
除了給每一項(xiàng)設(shè)置超時(shí),還可以單獨(dú)給第一項(xiàng)設(shè)置一個(gè)超時(shí)。它默認(rèn)在immediate
調(diào)度器上執(zhí)行。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/timeout.6.png" alt="Timeout" />
同上,但是同時(shí)可以指定一個(gè)備用的Observable。它默認(rèn)在immediate
調(diào)度器上執(zhí)行。