我正在尝试创建一个将发出延迟值的可观察对象。然而,这些值是瞬时变化的。我在 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/