Adr*_*lat 64 observable typescript angular
出于测试目的,我正在创建Observable替换实际http调用返回的observable的对象Http.
我的observable是使用以下代码创建的:
fakeObservable = Observable.create(obs => {
obs.next([1, 2, 3]);
obs.complete();
});
Run Code Online (Sandbox Code Playgroud)
问题是,这个可观察到的立即发出.有没有办法为其排放添加自定义延迟?
我试过这个:
fakeObservable = Observable.create(obs => {
setTimeout(() => {
obs.next([1, 2, 3]);
obs.complete();
}, 100);
});
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.
Mik*_*One 118
使用以下导入:
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/delay';
Run Code Online (Sandbox Code Playgroud)
试试这个:
let fakeResponse = [1,2,3];
let delayedObservable = Observable.of(fakeResponse).delay(5000);
delayedObservable.subscribe(data => console.log(data));
Run Code Online (Sandbox Code Playgroud)
更新:RXJS 6
上述解决方案在较新版本的RXJS(以及例如角度)中不再起作用.
所以场景是我有一个项目数组要检查API.API只接受一个项目,我不想通过一次发送所有请求来终止API.所以我需要在Observable流上定时释放项目,两者之间有一点延迟.
使用以下导入:
import { from, of } from 'rxjs';
import { delay } from 'rxjs/internal/operators';
import { concatMap } from 'rxjs/internal/operators';
Run Code Online (Sandbox Code Playgroud)
然后使用以下代码:
const myArray = [1,2,3,4];
from(myArray).pipe(
concatMap( item => of(item).pipe ( delay( 1000 ) ))
).subscribe ( timedItem => {
console.log(timedItem)
});
Run Code Online (Sandbox Code Playgroud)
它基本上为数组中的每个项创建一个新的'延迟'Observable.可能有很多其他方法,但这对我来说很好,并符合'新'RXJS格式.
Adr*_*Ber 66
在RxJS 5+中你可以这样做
import { Observable } from "rxjs/Observable";
import { of } from "rxjs/observable/of";
import { delay } from "rxjs/operators";
fakeObservable = of('dummy').pipe(delay(5000));
Run Code Online (Sandbox Code Playgroud)
在RxJS 6+中
import { of } from "rxjs";
import { delay } from "rxjs/operators";
fakeObservable = of('dummy').pipe(delay(5000));
Run Code Online (Sandbox Code Playgroud)
现在回答的时间已经很晚了......但万一有人可能会回到这个问题寻找答案
'delay'是Observable的属性(函数)
fakeObservable = Observable.create(obs => {
obs.next([1, 2, 3]);
obs.complete();
}).delay(3000);
Run Code Online (Sandbox Code Playgroud)
这对我有用......
您想要的是一个计时器:
// 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));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74757 次 |
| 最近记录: |