首页 文章

RxJS Pluck未定义属性

提问于
浏览
0

当与 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 回答

  • 1

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

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

相关问题