rxjs - 可观察的发射值不会延迟

标签 rxjs

我正在尝试创建一个将发出延迟值的可观察对象。然而,这些值是瞬时变化的。我在 https://stackblitz.com/edit/typescript-cwixas 创建了一个 stackblitz 。代码如下:

import { of } from 'rxjs';
import { map, delay } from 'rxjs/operators';

const arr = [1,2,3,4,5];
const source = of(...arr);
const source2 = source.pipe(delay(2000));
const subscribe = source2.subscribe(val => console.log(val));

最佳答案

delay() 运算符只是为每个next 值添加延迟,但它并不关心前一个延迟是否已过。

所以这里发生的是 of() 立即发出 5 个值,其中所有 5 个值都计划在 2 秒后通过 delay 同时重新发出。

您必须使用例如 concatMap 将每个值投影到 Observable 中并等待完成。然后才继续使用另一个值:

const arr = [1,2,3,4,5];
const source = of(...arr).pipe(
  concatMap(value => of(value).pipe(
    delay(2000),
  )),
);

source.subscribe(...);

您的更新演示:https://stackblitz.com/edit/typescript-cknhbr?file=index.ts

关于rxjs - 可观察的发射值不会延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55182240/

相关文章:

angular - 使用 switchMap 和 forkJoin 时合并结果

reactjs - 如何在每个 Action 中发出事件

angular - 如何测试具有去抖时间的效果?

rxjs - 如何将 useReducer 和 rxjs 与 React hooks 一起使用?

javascript - 如何从服务器获取数据?使用区间运算符

javascript - Observable 对多个订阅者执行一次

javascript - 当只有一个订阅者时,为什么一个序列会被多次调用?

angular - 使用 ngrx 存储进行身份验证的路由防护

rxjs - 如何在 RxJS 中做不同的 throttle

angular - Angular 路由参数 Observable 的 Observable.forkJoin