RxJS Pluck未定义属性

时间:2016-03-10 20:10:58

标签: javascript rxjs

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

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

然后我把它放在一个可观察的地方:

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

然后我订阅了那个observable:

source1.subscribe(
    (value) => { console.log("Received value: ", 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");返回undefined?

1 个答案:

答案 0 :(得分:1)

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

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