Для тестирования я создаю Observable
объекты, которые заменяют заметное, которое было бы возвращено фактическим вызовом http с Http
.
Мое заметное создается со следующим кодом:
fakeObservable = Observable.create(obs => {
obs.next([1, 2, 3]);
obs.complete();
});
Вещь, это заметное испускает immediatly. Существует ли способ добавить пользовательскую задержку с ее эмиссией?
Я попробовал это:
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 путем отправления всех запросов сразу. Таким образом, мне нужен синхронизированный выпуск объектов на Заметном потоке с маленькой промежуточной задержкой.
Использование следующий импорт:
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.
В 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));
import * as Rx from 'rxjs/Rx';
Мы должны добавить вышеупомянутый импорт для создания кода удара для работы
Let obs = Rx.Observable
.interval(1000).take(3);
obs.subscribe(value => console.log('Subscriber: ' + value));