我有一个包含服务器用户列表的类 其他类可以操纵服务器上的列表,例如呼叫添加或删除操作 我的Core-Class引用了其他正在操作服务器列表的类。
我想:
我的结构
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。
感谢。
答案 0 :(得分:1)
我对反应性实施的想法是:
在您的UserService中添加以下内容:
var loadSubject = new Subject();
var usersObservable = loadSubject.flatMap(
Observable.fromPromise(<your http call that returns promise>)).share()
function loadUsers(){
loadSubject.next(true);
}
然后每个进行更改的插件都会调用:
userService.loadUsers();
您希望获得更新的Core,插件和其他类只会:
loadService.usersObservable.subscribe(function(usersFreshValue){
this.users = usersFreshValue;
})
请注意,我使用'.share()'来避免重复数据。
可能的改进:
代替loadUsers方法,让每个插件调用userService.loadSubject.next(true);
使用背压/缓冲操作符以避免过于频繁的呼叫。例如去抖(小心!使用不当,可能导致饥饿)或bufferWithTime +过滤器(以确保不在空缓冲区上触发)
使用行为/重播可观察量,以便新订阅者能够快速获得最新价值。