javascript - rxjs 内部原生 map 提前退出

标签 javascript rxjs observable rxjs5

假设有一个端点返回结构的内容:

{
  results: [
    {hoofed: {
      //animal1
      }
    },
    {feline: {
      //animal2
    }},
    {other: {
      //animal3
    }}
  ]
}

假设我有这样的东西:

import {RxHR} from '@akanass/rx-http-request'

return RxHR.get('www.third_party.com')
  .pluck('body')
  .map(JSON.parse)
  .pluck('results')
  .map((animals) => animals.map((animal) => animal['hoofed'] || animal['feline']))

我希望它具有以下行为:

1) 提取响应正文。

2)解析JSON

3)提取所有结果

4) 在有蹄类或猫科动物的键上拉取值,产生:

[animal1, animal2]

相反,这仅返回第一个匹配条件的项目,例如[animal1] 而不是像我期望的那样将数组映射到另一个数组。我的问题是,为什么?而我怎样才能实现这样的内心转变呢?

最佳答案

实际上,您的流会返回诸如[animal1,animal2,undefined]之类的内容。该流缺少过滤器运算符。

const flatAnimal = animal => animal['hoofed'] || animal['feline']

Rx.Observable.of(results)
  .map(JSON.parse)
  .map((animals) => animals.filter(flatAnimal).map(flatAnimal))

或者您可以将数组作为可观察序列使用

Rx.Observable.of(results)
  .flatMap(JSON.parse)
  .filter(flatAnimal)
  .map(flatAnimal)
  .toArray()

示例:https://jsfiddle.net/3u43176d/

关于javascript - rxjs 内部原生 map 提前退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44249759/

相关文章:

javascript - 在 aspx 输入字段上/中插入文本并设置焦点?

javascript - 将所有元素包装在一个元素中,直到出现特定标记

javascript - Rxjs 一个 Observable 馈入另一个

angular - .map 运算符后打印的 NaN 值

java - 使用 subscribe() 的 Observable<T> 对象不会打印值

javascript - 使用 (number, number) 创建 javascript 对象

javascript - 如何使用 Protractor 测试是否加载了正确的图像?

javascript - 分配给组件属性时不执行订阅

angular - Observable.forkJoin() 不执行

error-handling - 从观察者内部的 “error”函数调用 “next”