web-dev-qa-db-fra.com

Comment convertir une réponse d'API Fetch en RxJS Observable?

Comment puis-je convertir n'importe quel Fetch API retourne à RxJS Observable ? Est-ce que RxJS.fromPromise aide?

7
wonderful world

découvrez ceci article

var result = Rx.Observable.fromPromise(fetch('http://myserver.com/'));
result.subscribe(x => console.log(x), e => console.error(e));
8
kit

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*/);

11
wawka

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);
    }),
)
1
Shota Tamura

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 )

1
sonnenhaft