1. ホーム
  2. angular

[解決済み] 遅延のあるobservableを作成するには?

2022-09-30 01:37:25

質問

質問

テストのために、私は Observable オブジェクトを作成し、実際の http 呼び出しによって返される observable を Http .

私のobservableは以下のコードで作成されています。

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

問題は、このobservableが即座に発行されることです。このオブジェクトにカスタムの遅延を追加する方法はありますか?


トラック

これを試してみました。

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の新しいバージョン(と、例えばangular)ではもう本当に機能しません。

シナリオは、私が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)
    });

これは基本的に、配列の各項目に対して新しい「遅延」Observableを作成します。おそらく他の多くの方法があると思いますが、これは私のためにうまく機能し、「新しい」RXJSの形式に準拠しています。