2017-05-29 5 views
0

holen abrufen ich json Daten von meinem Server auf diese Weise:Update-Versprechen Wert mit http-Antwort-Info

const stream = Observable.fromPromise(fetch('http://...')).flatMap(response => response.json()) 

Und nun möchte Ich mag einige http-Antwort-Eigenschaften in den zurückgegebenen Wert verschmelzen.

Der folgende Code funktioniert nicht wirklich. Eigenschaften scheinen in das Versprechen selbst statt dessen Wert zu verschmelzen ...

const stream = Observable.fromPromise(fetch('http://...')).flatMap(response => { 
    const data = response.json() 
    return { 
    ...data, 
    responseStatus: { 
     code: response.code, 
     text: response.text, 
    } 
    } 
) 

Es ist etwas, was ich nicht verstehe ..

+2

'.json()' gibt ein Versprechen. –

+0

Danke! Also habe ich ein neues Observable aus '.json()' erstellt und Eigenschaften mit dem Map-Operator verschmolzen. Es funktioniert, aber ich weiß nicht, ob es die beste Lösung ist, wie oft mit RX für einen Anfänger! – TeChn4K

Antwort

0

.json() return ein Versprechen ein Tupel mit bzw. und der json erhalten! (Danke @ Felix-Kling für die Spitze)

const stream = Observable.fromPromise(fetch('http://...')).flatMap(response => 
    Observable.from(response.json()).map(data => ({ 
    ...data, 
    responseStatus: { 
     code: response.status, 
     text: response.statusText, 
    }, 
    })) 
) 

Bitte einen Kommentar, wenn Sie eine bessere/andere Antwort haben

-1

Hope this Sie hilft, flatMap das Versprechen auf das Ergebnis glätten Wert, im nächsten werden von einem Operator

Observable 
    .fromPromise(fetch('yourUrl')) 
    .flatMap(resp => resp.json()() 
    .map(data => ({ 
    ...data, 
    responseStatus: { 
     code: data.code, 
     text: data.text, 
    } 
    })) 
+0

Sorry, aber deine Antwort ist falsch. Das zweite fn-Argument ist der Index. Nach der Korrektur und dem seltsamen ": any" erzeugt es eine Ausnahme. – TeChn4K

+0

@ TeChn4K Ich benutzte typescript sorry, ich aktualisierte die die Antwort – kaseOga

+0

Es gibt immer noch ein Problem: Antwortstatus ist nicht in der Kartenfunktion verfügbar, da flatMap Rückantwort Wert ... – TeChn4K