我如何创建一个可观察的延迟

提问

为了测试的目的,我创建了 Observable对象来替换可观察到的对象,这些对象将由使用 Http的实际 http 调用返回。

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

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

问题是,这个可观测的发射立即。有没有办法添加一个自定义的延迟发射?


田径

我试过了:

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

但好像没用。

172211 次浏览

使用以下进口产品:

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));

更新: RXJS6

上面的解决方案在 RXJS 的新版本(比如棱角版本)中不再真正起作用。

所以场景是我有一个项数组要用 API 检查。这个 API 只接受一个条目,我不想通过一次发送所有请求来终止这个 API。因此,我需要一个定时释放的项目上的观察流中间有一个小的延迟。

使用以下进口产品:

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)
});

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

现在回答有点晚了,但是以防有人回到这个问题来寻找答案

“延迟”是可观测的属性(函数)

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

这招对我很管用。

在 RxJS5 + 你可以这样做

import { Observable } from "rxjs/Observable";
import { of } from "rxjs/observable/of";
import { delay } from "rxjs/operators";


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

在 RxJS6 +

import { of } from "rxjs";
import { delay } from "rxjs/operators";


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

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

from([1, 2, 3]).pipe(concatMap(item => of(item).pipe(delay(1000))));

import * as Rx from 'rxjs/Rx';

我们应该添加上述导入,使吹码工作

Let obs = Rx.Observable
.interval(1000).take(3);


obs.subscribe(value => console.log('Subscriber: ' + value));

你需要的是一个计时器:

// 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));

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

链接到文档