类 之间的通知使用 Observable

Notification between classes using Observable

我有一个 class,其中包含来自服务器的用户列表。
其他 classes 可以操纵服务器上的列表,例如调用添加或删除操作。
我的 Core-Class 引用了其他 classes,它们正在处理服务器上的列表。

我愿意:

我的结构

Core {

     users: [];

     plugin1: Plugin;
     plugin2: Plugin;

     //Get a new list of users from the server
     loadUsers() {
      userService.loadUsers.then(function (res) {
        this.users = res;
      })
     }

    }

    Plugin {

    //sends a request to the server to create a special user, 
    //depending on plugin implementation
    createUser();
    }

我才刚刚开始使用 rx。我了解工厂方法、热与冷可观察性以及其他基本内容。但我无法想象如何以正确的方式使用 rx 来做到这一点。

谢谢。

我对响应式实现的想法是:

在您的用户服务中添加以下内容:

var loadSubject = new Subject();
var usersObservable = loadSubject.flatMap(
  Observable.fromPromise(<your http call that returns promise>)).share()

function loadUsers(){
  loadSubject.next(true);
}

然后每个进行更改的插件将简单地调用:

userService.loadUsers();

您的核心、插件和其他想要更新的 类 只需执行以下操作:

loadService.usersObservable.subscribe(function(usersFreshValue){
  this.users = usersFreshValue;
})

请注意,我使用了“.share()”来避免数据重复。

可能的改进:

  1. 让每个插件调用 userService.loadSubject.next(true);

  2. 而不是 loadUsers 方法
  3. 使用backpressure/buffering运算符避免调用过于频繁。例如 debounce(注意!如果使用不当,可能会导致饥饿)或 bufferWithTime + filter(以确保您不会在空缓冲区上触发)

  4. 使用 behavioral/replay observables 以便新订阅者可以快速获取最新值。