RxJS timeout

2020-10-14 10:42 更新

如果 Observable 在給定的時間范圍內未發(fā)出值,則發(fā)生錯誤。

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

參量

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

returns

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

描述

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

timeout運算符接受數字或日期作為參數。

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

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

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

例子

檢查是否在特定時間內發(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.
);

也可以看看

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號