如何创建延迟

时间:2017-02-23 11:05:53

标签: angular typescript observable

问题

出于测试目的,我创建Observable个对象,用Http替换实际http调用返回的observable。

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

fakeObservable = Observable.create(obs => {
  obs.next([1, 2, 3]);
  obs.complete();
});
事实是,这种可观察性立即发出。有没有办法为其排放添加自定义延迟?

轨道

我试过了:

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

但它似乎不起作用。

4 个答案:

答案 0 :(得分:40)

在RxJS 5+中你可以这样做

a = [ [ 1, 2, 3 ] ]

[a] = [ [ 1, 2, 3 ] ]

[[a]] = [ [ 1, 2, 3 ] ]

在RxJS 6 +中

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

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

答案 1 :(得分:8)

现在回答的时间已经很晚了......但以防万一有人回到这个问题寻找答案

'delay'是Observable的属性(函数)

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

这对我有用......

答案 2 :(得分:5)

您想要的是计时器:

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

答案 3 :(得分:-2)

import * as Rx from 'rxjs/Rx';

我们应该添加以上导入内容以使打击代码起作用

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

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