首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我怎样才能创造一个可以观察到的延迟

我怎样才能创造一个可以观察到的延迟
EN

Stack Overflow用户
提问于 2017-02-23 11:05:52
回答 6查看 171.8K关注 0票数 131

问题

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

我的可观察性是用以下代码创建的:

代码语言:javascript
运行
复制
fakeObservable = Observable.create(obs => {
  obs.next([1, 2, 3]);
  obs.complete();
});

问题是,这个可观察到的发射马上就会发出。是否有办法在其排放中添加自定义延迟?

跟踪

我试过这个:

代码语言:javascript
运行
复制
fakeObservable = Observable.create(obs => {
  setTimeout(() => {
    obs.next([1, 2, 3]);
    obs.complete();
  }, 100);
});

但似乎不起作用。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-02-23 11:58:29

使用下列进口:

代码语言:javascript
运行
复制
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/delay';

试试这个:

代码语言:javascript
运行
复制
let fakeResponse = [1,2,3];
let delayedObservable = Observable.of(fakeResponse).delay(5000);
delayedObservable.subscribe(data => console.log(data));

更新: RXJS 6

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

因此,场景是,我有一个项目数组来检查一个API。API只接受一个项目,我不想通过一次发送所有请求来扼杀API。因此,我需要在可观察的流中定时释放项目,在两者之间有一个小延迟。

使用下列进口产品:

代码语言:javascript
运行
复制
import { from, of } from 'rxjs';
import { delay } from 'rxjs/internal/operators';
import { concatMap } from 'rxjs/internal/operators';

然后使用以下代码:

代码语言:javascript
运行
复制
const myArray = [1,2,3,4];

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

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

票数 191
EN

Stack Overflow用户

发布于 2018-06-14 21:54:05

在RxJS 5+中,您可以这样做

代码语言:javascript
运行
复制
import { Observable } from "rxjs/Observable";
import { of } from "rxjs/observable/of";
import { delay } from "rxjs/operators";

fakeObservable = of('dummy').pipe(delay(5000));

在RxJS 6+中

代码语言:javascript
运行
复制
import { of } from "rxjs";
import { delay } from "rxjs/operators";

fakeObservable = of('dummy').pipe(delay(5000));

如果要延迟每个发出的值,请尝试

代码语言:javascript
运行
复制
from([1, 2, 3]).pipe(concatMap(item => of(item).pipe(delay(1000))));
票数 142
EN

Stack Overflow用户

发布于 2018-11-22 03:41:07

你想要的是计时器:

代码语言:javascript
运行
复制
// RxJS v6+
import { timer } from 'rxjs';

//emit [1, 2, 3] after 1 second.
const source = timer(1000).map(([1, 2, 3]);
//output: [1, 2, 3]
const subscribe = source.subscribe(val => console.log(val));
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42413969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档