【问题标题】:RxJS How to update when array (map) data changes?RxJS 如何在数组(地图)数据更改时更新?
【发布时间】:2018-01-10 13:38:08
【问题描述】:

我在地图上使用from 有一个简单的 RxJS 可观察对象:

当我在订阅 observable 后为地图设置新的键/值时,没有console.logs。当数据映射发生变化时,如何让 observable 更新,以便观察者将 console.log 更改?

我在这里遗漏了什么吗?我试过阅读文档和观看视频,但没有找到任何关于如何实现这一点的数据。谢谢

const data = new Map([['item1', value1], ['item2', 'value2'], ['item3', value3]]);
const data$ = Rx.Observable.from(data);
data$.subscribe(
    (x) => {
        console.log('OBSERVABLE X');
        console.log(x);
    },
    (err) => {
        console.log('OBSERVABLE ERR');
        console.log(err);
    },
    (complete) => {
        console.log('OBSERVABLE COMPLETE');
        console.log(complete);
    },
);
data.set('item3', 'value3');

【问题讨论】:

  • 因为您没有将更新从 observable 推送到订阅者。这不是 observables 的运作方式
  • 你是说不能设置 Observable 来监听 Map 上的变化,然后将变化推送给订阅者?
  • Observables 不会主动观察底层源的变化,如果你改变底层源,你必须告诉 observable 将变化广播给它的订阅者,查看 SubjectBehaviorSubject 到做广播。想想看,observable 怎么会知道你背着它改变了源?

标签: javascript rxjs


【解决方案1】:

你的 observable 是冷的,你需要让它变热才能实现你想要的功能。

Hot observable 通常是主题,您需要将其转换为主题,然后尝试在地图中添加另一个值并查看,理想情况下它应该可以工作。

  const subject = new Subject();
  data$.subscribe(subject)

【讨论】:

    猜你喜欢
    • 2023-02-15
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2012-03-18
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多