2017-05-29 25 views
0

我從服務器獲取這樣JSON數據:更新承諾價值與獲取HTTP響應信息

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

現在我想一些HTTP響應特性合併到返回的值。

下面的代碼不實際工作。屬性似乎是融入承諾本身,而不是它的價值...

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

也有一些是我不明白..

+2

'以.json請添加評論()'返回一個承諾。 –

+0

謝謝!所以我從'.json()'創建了一個新的可觀察元素,並將其與map操作符合並。它可行,但我不知道它是否是最好的解決方案,就像經常使用rx的初學者一樣! – TeChn4K

回答

0

.json()回報的承諾! (感謝@費利克斯 - 克林的小費)

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

,如果你有更好的/其他答案

-1

希望這可以幫助你,flatMap將壓平的承諾,結果值,在接下來的操作,您將收到一個元組RESP和JSON

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

對不起,但你的回答是錯誤的。第二個map fn參數是索引。在對此進行修正之後,以及奇怪的「:任何」都會產生一個例外。 – TeChn4K

+0

@ TeChn4K我正在使用打字機抱歉,我更新了答覆 – kaseOga

+0

仍然存在一個問題:響應狀態在地圖功能中不可用,因爲flatMap返回響應值... – TeChn4K