属性 的 RxJS Pluck 未定义
RxJS Pluck Undefined for property
当与 Rx.DOM.getJSON
一起使用时,我无法从 pluck
获得正确的值。我在 /resource1
处设置了一个 JSON 端点,服务于静态对象数组:
[{ name: "Alpha" }, { name: "Beta" }]
然后我把它放在一个可观察的对象中:
let source1 = Rx.DOM.getJSON("/resource1");
然后我订阅那个 observable:
source1.subscribe(
(value) => { console.log("Received value: ", value); }
);
正如预期的那样,它会输出字符串 "Received value: " 和两个对象,每个对象都有一个 name
属性。但是,当我将 pluck
添加到可观察对象的末尾时:
let source1 = Rx.DOM.getJSON("/resource1").pluck("name");
注销"Received value: undefined"。如果我改为在订阅函数中执行此操作:
source1.subscribe(
(value) => { console.log("Received value", value.map((i) => { return i.name; })); }
)
如预期的那样,我得到了两个名称值。如果我尝试 the RxJS documentation on pluck 中示例的修改版本,它 return 的名称值符合预期:
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");
return 未定义?
我在 forums for the book I was referencing 上找到了解决方案。问题是 getJSON
returns 是单个事件而不是事件流,因此 pluck
不会直接在其中起作用。要使用 pluck
,您首先必须使用 flatMap
和 fromArray
.
将其转换为事件流
Rx.DOM.getJSON("/resource1").flatMap(Rx.Observable.fromArray).pluck("name");
当与 Rx.DOM.getJSON
一起使用时,我无法从 pluck
获得正确的值。我在 /resource1
处设置了一个 JSON 端点,服务于静态对象数组:
[{ name: "Alpha" }, { name: "Beta" }]
然后我把它放在一个可观察的对象中:
let source1 = Rx.DOM.getJSON("/resource1");
然后我订阅那个 observable:
source1.subscribe(
(value) => { console.log("Received value: ", value); }
);
正如预期的那样,它会输出字符串 "Received value: " 和两个对象,每个对象都有一个 name
属性。但是,当我将 pluck
添加到可观察对象的末尾时:
let source1 = Rx.DOM.getJSON("/resource1").pluck("name");
注销"Received value: undefined"。如果我改为在订阅函数中执行此操作:
source1.subscribe(
(value) => { console.log("Received value", value.map((i) => { return i.name; })); }
)
如预期的那样,我得到了两个名称值。如果我尝试 the RxJS documentation on pluck 中示例的修改版本,它 return 的名称值符合预期:
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");
return 未定义?
我在 forums for the book I was referencing 上找到了解决方案。问题是 getJSON
returns 是单个事件而不是事件流,因此 pluck
不会直接在其中起作用。要使用 pluck
,您首先必须使用 flatMap
和 fromArray
.
Rx.DOM.getJSON("/resource1").flatMap(Rx.Observable.fromArray).pluck("name");