RxJS timeout

2020-10-14 10:42 更新

如果 Observable 在給定的時(shí)間范圍內(nèi)未發(fā)出值,則發(fā)生錯(cuò)誤。

timeout<T>(due: number | Date, scheduler: SchedulerLike = async): MonoTypeOperatorFunction<T>

參量

到期 數(shù)字指定 Observable 必須在其內(nèi)發(fā)出值的時(shí)間 或日期指定可觀察的完成時(shí)間
調(diào)度器 可選的。 默認(rèn)值為 async。         調(diào)度程序控制何時(shí)進(jìn)行超時(shí)檢查。

returns

MonoTypeOperatorFunction<T>:可觀察到,可反映源的行為,除非超時(shí)檢查失敗。

描述

Observable 的超時(shí)不能足夠快地發(fā)出值。

timeout運(yùn)算符接受數(shù)字或日期作為參數(shù)。

如果提供了數(shù)字,則返回行為類似于源的 Observable 可以觀察到,除非在一段時(shí)間內(nèi)沒(méi)有發(fā)出任何值。 因此,如果您提供 100參數(shù)作為參數(shù),并且第一個(gè)值在 50ms 后 在訂閱的那一刻,該值將簡(jiǎn)單地由結(jié)果重新發(fā)射 可觀察的。 但是,如果過(guò)了 100 毫秒又沒(méi)有發(fā)出第二個(gè)值, 流將以錯(cuò)誤結(jié)尾,并且源 Observable 將被取消訂閱。 從可觀察到的整個(gè)生命周期開(kāi)始執(zhí)行這些檢查 它已被訂閱,直到它完成或自身出錯(cuò)。 因此,每個(gè)值都必須是 從上一個(gè)值開(kāi)始在指定時(shí)間段內(nèi)發(fā)出。

如果提供的參數(shù)是 Date,則返回的 Observable 的行為將有所不同。 它拋出 如果 Observable 在提供的 Date 之前未完成。 這意味著 在這種情況下,發(fā)出特定值無(wú)關(guān)緊要。 如果可觀察未完成 在提供日期之前,“可觀察的”來(lái)源將被取消訂閱。 除此之外,導(dǎo)致 流的行為與源 Observable 相同。

timeout還接受調(diào)度程序作為第二個(gè)參數(shù)。 它用于安排時(shí)刻(或多個(gè)時(shí)刻) 當(dāng)返回 Observable 時(shí),將檢查源流是否發(fā)出了值或已完成。

例子

檢查是否在特定時(shí)間內(nèi)發(fā)出滴答聲

import { interval } from 'rxjs';
import { timeout } from 'rxjs/operators';


const seconds = interval(1000);


seconds.pipe(timeout(1100))      // Let's use bigger timespan to be safe,
                                 // since `interval` might fire a bit later then scheduled.
.subscribe(
    value => console.log(value), // Will emit numbers just as regular `interval` would.
    err => console.log(err),     // Will never be called.
);


seconds.pipe(timeout(900))
.subscribe(
    value => console.log(value), // Will never be called.
    err => console.log(err),     // Will emit error before even first value is emitted,
                                 // since it did not arrive within 900ms period.
);

使用日期檢查是否可觀察完成

import { interval } from 'rxjs';
import { timeout } from 'rxjs/operators';


const seconds = interval(1000);


seconds.pipe(
  timeout(new Date("December 17, 2020 03:24:00")),
)
.subscribe(
    value => console.log(value), // Will emit values as regular `interval` would
                                 // until December 17, 2020 at 03:24:00.
    err => console.log(err)      // On December 17, 2020 at 03:24:00 it will emit an error,
                                 // since Observable did not complete by then.
);

也可以看看

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)