行为主体淘汰赛可观察表现

问题描述

我正在处理一个项目,在该项目中我有一个跨应用程序运行的单例。这个单例提供了一个视图模型可以订阅的 observable。订阅后,订阅者应该从 observable 中获取最新数据,然后继续侦听更多数据。

基本上,我正在寻找 Knockout 中的 RxJS BehaviorSubject 实现。

我是 KO 的新手。我有一个可以工作的扩展器,但我不确定我所做的是否会导致问题。

这是我的扩展器:

require(['knockout'],function(ko) {
  ko.extenders.subscribeWithLatest = function (target) {
    var _subscribe = target.subscribe;
    target.subscribe = function (callback) {
      var subscription = _subscribe.apply(this,arguments);
      var currValue = target.peek();
      if (currValue) {
        // I'm using setTimeout to stop the value from being
        // provided before the subscription is returned.
        // I'm not proud of this.
        setTimeout(() => {
          try { callback(currValue); } catch(e) {} }
        );
      }
      return subscription;
    };
    return target;
  };
});

上面的代码确实按我的意愿工作,但我不确定它的效率。

解决方法

它实际执行的操作(订阅、峰值、等待、获取价值)有点混乱。你试过像这样更简单吗?

myViewModel.personName.subscribe(function(newValue) {
   alert("The person's new name is " + newValue);
});

Knockout 并没有完全包含 RxJS 行为主题,坦率地说,它并不总是需要的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...