Javascript 使用获取http响应信息更新承诺值

Javascript 使用获取http响应信息更新承诺值,javascript,rxjs,Javascript,Rxjs,我通过以下方式从服务器检索json数据: const stream = Observable.fromPromise(fetch('http://...')).flatMap(response => response.json()) 现在我想将一些http响应属性合并到返回值中 下面的代码实际上不起作用。属性似乎合并到承诺本身,而不是它的价值 const stream = Observable.fromPromise(fetch('http://...')).flatMap(respon

我通过以下方式从服务器检索json数据:

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,
    }
  }
)

有一点我不明白。

希望这对您有所帮助,flatMap将把承诺平坦化为结果值,在下一个操作符中,您将收到一个带有resp和json的元组

Observable
  .fromPromise(fetch('yourUrl'))
  .flatMap(resp => resp.json()()
  .map(data => ({
    ...data,
    responseStatus: {
      code: data.code,
      text: data.text,
    }
  }))
.json()
返回承诺!(感谢@Felix Kling的提示)


如果您有更好的/其他答案,请添加评论。

.json()
返回承诺。谢谢!因此,我从
.json()
创建了一个新的observable,并将属性与map操作符合并。它是有效的,但我不知道它是否是最好的解决方案,因为对于初学者来说,经常使用rx!对不起,你的回答错了。第二个map fn参数是索引。更正后,奇怪的“:any”会产生一个异常。@TeChn4K我使用的是typescript抱歉,我更新了回复。仍然存在一个问题:由于flatMap返回响应值,所以在map函数中响应状态不可用。。。
const stream = Observable.fromPromise(fetch('http://...')).flatMap(response =>
  Observable.from(response.json()).map(data => ({
    ...data,
    responseStatus: {
      code: response.status,
      text: response.statusText,
    },
  }))
)