【问题标题】:RxJS Pluck Undefined for propertyRxJS Pluck 属性未定义
【发布时间】:2016-03-10 20:10:58
【问题描述】:

当与Rx.DOM.getJSON 一起使用时,我无法从pluck 获得正确的值。我在/resource1 设置了一个 JSON 端点,为静态对象数组提供服务:

[{ name: "Alpha" }, { name: "Beta" }]

然后我把它放在一个 observable 中:

let source1 = Rx.DOM.getJSON("/resource1");

然后我订阅那个 observable:

source1.subscribe(
    (value) => { console.log("Received value: ", value); }
);

正如预期的那样,它会注销字符串“Received value:”和两个对象,每个对象都有一个name 属性。但是,当我将 pluck 添加到 observable 的末尾时:

let source1 = Rx.DOM.getJSON("/resource1").pluck("name");

它会注销“接收值:未定义”。如果我改为在订阅函数中执行此操作:

source1.subscribe(
    (value) => { console.log("Received value", value.map((i) => { return i.name; })); }
)

正如预期的那样,我得到了两个名称值。如果我尝试使用 the RxJS documentation on pluck 的示例的修改版本,它会按预期返回名称值:

let source3 = Rx.Observable.from([{name: 1}, {name: 2}, {name: 3}]).pluck("name");

source3.subscribe(
    (value) => { console.log("Received value: ", value); }
);

为什么Rx.DOM.getJSON("/resource1").pluck("name"); 返回未定义?

【问题讨论】:

    标签: javascript rxjs


    【解决方案1】:

    我在forums for the book I was referencing 上找到了解决方案。问题是getJSON 返回单个事件而不是事件流,因此pluck 不能直接在其中工作。要使用pluck,您首先必须使用flatMapfromArray 将其转换为事件流。

    Rx.DOM.getJSON("/resource1").flatMap(Rx.Observable.fromArray).pluck("name");
    

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 2017-06-20
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      相关资源
      最近更新 更多