javascript - RxJS Pluck 属性未定义

标签 javascript rxjs

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

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

然后我将其放入可观察的中:

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

然后我订阅该可观察的:

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

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

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");返回未定义?

最佳答案

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

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

关于javascript - RxJS Pluck 属性未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35926278/

相关文章:

javascript - 使用 javascript 转义 php 字符,正确的语法引号

javascript - 复选框被选中为 false - jquery

angular - 如何通过间隔运算符发送请求?

typescript - 使用 Angular 4 Pipes 或 Rxjs 运算符对对象数组 (json) 中的属性值进行分组/求和

Angular 2 rxjs 超时回调

javascript - 文本区域字符计数器

javascript - html,js 中的 css 编辑器

javascript - 使用 jquery 选择 'a' 标记中的 html 但获取 html 不是函数

angular - 如何获取最后发出的 Observable

javascript - RxJs 中是否有 "async"版本的过滤器运算符?