RxJS timeout
如果 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.
);