如何创建具有延迟的可观察对象

2024-02-28

Question

出于测试目的,我正在创建Observable替换实际 http 调用返回的可观察对象的对象Http.

我的可观察对象是使用以下代码创建的:

fakeObservable = Observable.create(obs => {
  obs.next([1, 2, 3]);
  obs.complete();
});

问题是,这个 observable 立即发出。有没有办法为其发射添加自定义延迟?


Track

我试过这个:

fakeObservable = Observable.create(obs => {
  setTimeout(() => {
    obs.next([1, 2, 3]);
    obs.complete();
  }, 100);
});

但这似乎不起作用。


使用以下导入:

import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/delay';

尝试这个:

let fakeResponse = [1,2,3];
let delayedObservable = Observable.of(fakeResponse).delay(5000);
delayedObservable.subscribe(data => console.log(data));

更新:RXJS 6

上述解决方案在新版本的 RXJS(例如 Angular)中不再有效。

因此,场景是我有一组项目需要使用 API 进行检查。该 API 只接受单个项目,我不想通过一次发送所有请求来终止该 API。因此,我需要在 Observable 流上定时释放项目,并在两者之间有一个小的延迟。

使用以下导入:

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

然后使用以下代码:

const myArray = [1,2,3,4];

from(myArray).pipe(
        concatMap( item => of(item).pipe ( delay( 1000 ) ))
    ).subscribe ( timedItem => {
        console.log(timedItem)
    });

它基本上为数组中的每个项目创建一个新的“延迟”Observable。可能还有很多其他方法可以做到这一点,但这对我来说效果很好,并且符合“新”RXJS 格式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建具有延迟的可观察对象 的相关文章

随机推荐