En utilisant les importations suivantes :
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/delay';
Essayez ça :
let fakeResponse = [1,2,3];
let delayedObservable = Observable.of(fakeResponse).delay(5000);
delayedObservable.subscribe(data => console.log(data));
MISE À JOUR : RXJS 6
La solution ci-dessus ne fonctionne plus vraiment dans les nouvelles versions de RXJS (et d'angular par exemple).
Le scénario est donc le suivant : j'ai un tableau d'éléments à vérifier avec une API. L'API n'accepte qu'un seul élément, et je ne veux pas tuer l'API en envoyant toutes les requêtes en même temps. J'ai donc besoin d'une libération minutée des éléments sur le flux Observable avec un petit délai entre les deux.
Utilisez les importations suivantes :
import { from, of } from 'rxjs';
import { delay } from 'rxjs/internal/operators';
import { concatMap } from 'rxjs/internal/operators';
Utilisez ensuite le code suivant :
const myArray = [1,2,3,4];
from(myArray).pipe(
concatMap( item => of(item).pipe ( delay( 1000 ) ))
).subscribe ( timedItem => {
console.log(timedItem)
});
Il crée essentiellement un nouvel Observable 'retardé' pour chaque élément de votre tableau. Il y a probablement beaucoup d'autres façons de faire, mais celle-ci a bien fonctionné pour moi, et est conforme au 'nouveau' format RXJS.
0 votes
github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/
0 votes
J'ai essayé d'enchaîner
.create(...)
avec.delay(1000)
mais ça n'a pas marché : Observable_1.Observable.create(...).delay n'est pas une fonction.1 votes
Qu'essayez-vous exactement d'accomplir ?
0 votes
Êtes-vous abonné à l'observable ?
0 votes
Simuler le délai de réponse Http avec mon propre observable. @shusson oui, la classe que je teste appelle le service (que j'essaie de simuler) pour l'observable afin de s'y abonner.
0 votes
En fait, votre exemple devrait fonctionner...hmmm
0 votes
Je suppose que je vais tester mes appels http sans délai.
0 votes
Une observable ne se "résout" pas. Elle "émet".
0 votes
Pourquoi setTimeout ne fonctionne pas ici ? Quelqu'un ?