RxJS异步请求更新
RxJS Asynchronous Request Update
所以,多亏了RxJS,我现在正在学习反应性思考。现在,我正在读一本RxJS书(RxJS的反应式编程),我读过关于AsyncSubject以及它如何只缓存最后一个接收到的值。我想知道的是,如果我想更新服务器并进行可观察到的更新,会发生什么?既然onComplete已经被调用,我需要创建一个全新的观察者吗?还有其他模式我应该遵循吗?
我的总体要求是,我希望有一种方法可以干净地将数据传递到服务器和从服务器传递数据,并始终保持我的可观察(模型)新鲜。
谢谢,Lee
正如您所怀疑的,在调用onCompleted之后,您无法更改AsyncSubject的值。处理简单的"根据需要调用服务器,在调用之间缓存值"场景的典型方法是使用flatMapLatest将可观察到的触发器映射到表示服务器调用的AsyncSubject。例如,如果你想每30秒刷新一次数据,你可以这样做:
const subscription = Rx.Observable
.interval(30000)
.flatMapLatest(() => serverCall())
.subscribe(x => doStuffWithResult(x));
在您的情况下,我会考虑使用Websockets,因为您想要your observable (model) fresh at all times
类似的东西
var source = Rx.Observable.create(function (observer) {
websocket.onmessage = function( msg ) {
observer.onNext( msg );
}
websocket.onerror = function( error ) {
observer.onError( error );
}
websocket.onclose = function ( msg ) {
observer.onComplete( msg );
}
});
否则,您可以使用间隔
const subscription = Rx.Observable
.interval(1000)
.flatMapLatest(() => Rx.Observable.fromPromise(fetch( ... ).then( response => response.json() ).retry(5))
.subscribe( response => response );
如果出现错误,您可以始终使用retry
运算符不立即放弃。
相关文章:
- 在Rails中更新Div,而不更改更新请求后的视图
- 如何在执行 Ajax 请求大量数据库更新时实现进度条
- 使用rails中的ajax请求更新DB
- 如何在alt.js中使用源成功请求后更新状态
- 所选列表元素不会保持选中状态(通过ajax请求更新后)
- RxJS异步请求更新
- 多久向服务器发送一次Http请求以检查更新?(Ajax)
- RxJS:在每次返回并行http请求时更新客户端
- 如何使用每个ajax请求更新实例变量
- Angular没有't在http请求后更新我的对象
- 轮询更新主干模型/视图的请求
- Angular 在 http 请求后不更新页面(范围问题?
- 在每个请求 nodejs 中获取更新的文件
- 如何注册要在更新面板请求完成时运行的函数
- AngularJS:在成功的HTTP请求后更新指令范围
- MongoDB:可以合并两个更新请求
- 创建更新请求对象的Express参数中间件
- Rails仅对一个更新请求进行多次更新
- 如何向twitter API发送POST更新请求
- 在KendoUI数据源中获取更新请求的字符串