类 之间的通知使用 Observable
Notification between classes using Observable
我有一个 class,其中包含来自服务器的用户列表。
其他 classes 可以操纵服务器上的列表,例如调用添加或删除操作。
我的 Core-Class 引用了其他 classes,它们正在处理服务器上的列表。
我愿意:
- 在 Core-Class 中进行初始化调用以获取开头的列表
- Core-Class每次在服务器上操作列表时,插件都会通知Core-Class,所以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()”来避免数据重复。
可能的改进:
让每个插件调用 userService.loadSubject.next(true);
而不是 loadUsers 方法
使用backpressure/buffering运算符避免调用过于频繁。例如 debounce(注意!如果使用不当,可能会导致饥饿)或 bufferWithTime + filter(以确保您不会在空缓冲区上触发)
使用 behavioral/replay observables 以便新订阅者可以快速获取最新值。
我有一个 class,其中包含来自服务器的用户列表。
其他 classes 可以操纵服务器上的列表,例如调用添加或删除操作。
我的 Core-Class 引用了其他 classes,它们正在处理服务器上的列表。
我愿意:
- 在 Core-Class 中进行初始化调用以获取开头的列表
- Core-Class每次在服务器上操作列表时,插件都会通知Core-Class,所以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()”来避免数据重复。
可能的改进:
让每个插件调用 userService.loadSubject.next(true);
而不是 loadUsers 方法
使用backpressure/buffering运算符避免调用过于频繁。例如 debounce(注意!如果使用不当,可能会导致饥饿)或 bufferWithTime + filter(以确保您不会在空缓冲区上触发)
使用 behavioral/replay observables 以便新订阅者可以快速获取最新值。