Comment puis-je convertir n'importe quel Fetch API retourne à RxJS Observable ? Est-ce que RxJS.fromPromise aide?
découvrez ceci article
var result = Rx.Observable.fromPromise(fetch('http://myserver.com/'));
result.subscribe(x => console.log(x), e => console.error(e));
Comme l'appel retourne encore une autre promesse contenant l'objet de réponse, je créerais votre propre observable:
import { Observable } from 'rxjs';
const data$ = Observable.create(observer => {
fetch('http://server.com')
.then(response => response.json()) // or text() or blob() etc.
.then(data => {
observer.next(data);
observer.complete();
})
.catch(err => observer.error(err));
});
data$.subscribe(data => /*do something with data*/);
J'utilise rxjs @ 6.
L'opérateur qui accepte les observables (comme flatMap
, switchMap
, etc ...) peut également accepter promesse . C'est très simple, comme suit.
somethingObservable.pipe(
flatMap(() => fetch('http://some.api.com/post/1')),
subscribe((response) => {
console.log(response);
}),
)
Il existe libary rxjs-fetch , mais je suggère de ne pas l'utiliser et d'écrire à la place:
const getData = (url, params) => {
return fetch(url, params).then(r => {
return r.ok ? r.text() : Promise.reject(`${r.statusText} ${r.status}`)
})
}
const getDataObserver = (url, params) => Rx.Observable.fromPromise(getData())
(dans NodeJS, vous aurez besoin de node-fetch )