RxJS timeout

2020-10-14 10:42 更新

如果 Observable 在给定的时间范围内未发出值,则发生错误。

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

参量

到期 数字指定 Observable 必须在其内发出值的时间 或日期指定可观察的完成时间
调度器 可选的。 默认值为 async。         调度程序控制何时进行超时检查。

returns

MonoTypeOperatorFunction<T>:可观察到,可反映源的行为,除非超时检查失败。

描述

Observable 的超时不能足够快地发出值。

timeout运算符接受数字或日期作为参数。

如果提供了数字,则返回行为类似于源的 Observable 可以观察到,除非在一段时间内没有发出任何值。 因此,如果您提供 100参数作为参数,并且第一个值在 50ms 后 在订阅的那一刻,该值将简单地由结果重新发射 可观察的。 但是,如果过了 100 毫秒又没有发出第二个值, 流将以错误结尾,并且源 Observable 将被取消订阅。 从可观察到的整个生命周期开始执行这些检查 它已被订阅,直到它完成或自身出错。 因此,每个值都必须是 从上一个值开始在指定时间段内发出。

如果提供的参数是 Date,则返回的 Observable 的行为将有所不同。 它抛出 如果 Observable 在提供的 Date 之前未完成。 这意味着 在这种情况下,发出特定值无关紧要。 如果可观察未完成 在提供日期之前,“可观察的”来源将被取消订阅。 除此之外,导致 流的行为与源 Observable 相同。

timeout还接受调度程序作为第二个参数。 它用于安排时刻(或多个时刻) 当返回 Observable 时,将检查源流是否发出了值或已完成。

例子

检查是否在特定时间内发出滴答声

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

公众号
微信公众号

编程狮公众号