テスト目的で、実際のhttp呼び出しによって返される観測値をObservable
に置き換える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);
});
しかし、うまくいかないようです。
以下のインポートを使用します。
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の新しいバージョン(そして、例えば、角度付きのバージョン)では、実際にはもはやうまくいきません。
したがって、シナリオは、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)
});
それは基本的にあなたの配列内のすべてのアイテムに対して新しい '遅延'オブザーバブルを作成します。他にも多くの方法があるでしょうが、これは私にとってはうまくいき、 'new' RXJSフォーマットに準拠しています。
RxJS 5+では、このようにすることができます
import { Observable } from "rxjs/Observable";
import { of } from "rxjs/observable/of";
import { delay } from "rxjs/operators";
fakeObservable = of('dummy').pipe(delay(5000));
RxJS 6以降
import { of } from "rxjs";
import { delay } from "rxjs/operators";
fakeObservable = of('dummy').pipe(delay(5000));
ちょっと答えるのが遅れています...しかし念のため誰かが答えを探してこの質問に戻るかもしれません
'遅延'は、観測量の特性(機能)です。
fakeObservable = Observable.create(obs => {
obs.next([1, 2, 3]);
obs.complete();
}).delay(3000);
これは私のために働きました...
欲しいのはタイマーです。
// 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));