当与 Rx.DOM.getJSON
一起使用时,我无法从 pluck
获得正确的值 . 我在 /resource1
设置了一个JSON endpoints ,为静态对象数组提供服务:
[{ name: "Alpha" }, { name: "Beta" }]
然后我把它放在一个可观察的:
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");
返回undefined?
1 回答
我在forums for the book I was referencing找到了解决方案 . 问题是
getJSON
返回单个事件而不是事件流,因此pluck
将无法直接在其中工作 . 要使用pluck
,首先必须使用带有fromArray
的flatMap
将其转换为事件流 .