如何延迟创建可观察对象

新手上路,请多包涵

问题

出于测试目的,我正在创建 Observable 对象,这些对象将实际 http 调用返回的 observable 替换为 Http

我的 observable 是使用以下代码创建的:

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

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


追踪

我试过这个:

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

但这似乎不起作用。

原文由 Adrien Brunelat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 577
2 个回答

使用以下导入:

 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 格式。

原文由 MikeOne 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用 asyncScheduler ,它通过将任务放在 JavaScript 事件循环队列中来异步调度任务。最好用于及时延迟任务或安排间隔重复的任务。

链接到文档

原文由 Jayampathy Wijesena 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进