2017-05-29 50 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