websocket - 如何使用 Ember-Data 加载推送的记录更新而不与 inFlight 事务冲突?

标签 websocket ember.js ember-data

我的 Ember/Ember-Data/Rails 应用程序使用 WebSockets 将数据向下推送到客户端。我正在使用 Ember-Data 的 loadMany 方法将推送的数据添加到存储中。

但是,如果当前正在编辑和保存任何推送的记录,loadMany 将失败,因为该记录当前处于 inFlight 状态。例如:

-> 用户编辑记录并点击保存
-> Ember-Data 开始提交当前事务
-> Rails Controller 使用更新的 JSON 响应此记录并通过 WebSockets 发布更新的数据
-> 在事务完成之前接收到 WebSockets 数据,Ember-Data 在记录被标记为干净之前尝试用这个新数据更新记录

我找到的唯一解决方案是使用 Ember.run.later 延迟应用更新,超时时间约为 20 毫秒。 (Ember.run.next 无效。)

但是,这仅处理用户刚刚保存记录的情况。如果巧合的是,用户当前正在编辑的一条记录被其他人编辑,并且在事务完成之前收到推送更新,那么仍然会发生冲突并引发错误。

所以我的问题是,有没有办法:

(a) 当受影响的记录在进行中时,防止商店尝试加载更改;或者 (b) 延迟推送更新直到所有交易都干净?

最佳答案

*蟋蟀*

目前,我已经通过手动检查记录是否处于不可更新状态以及如果处于不可更新状态,注册退出该状态时的回调来解决此问题。然后在回调之后我检查推送更新是否有比记录更新的 updatedAt 值,如果有,合并两者。

关于websocket - 如何使用 Ember-Data 加载推送的记录更新而不与 inFlight 事务冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959968/

相关文章:

mysql - 关系:Ember 数据和 MySQL

ember.js - 为什么 router.transitionTo 在转换到同一模型两次时会中止?

ember.js - Ember : Promise (destroyRecord(). then()) 请求成功失败

java - 如何在 Spring 中为 WebSocket 升级请求自定义 HTTP 响应?

java - Netty - 如何在一台服务器上正确地提供 web 套接字和原始 tcp?

javascript - ember + 找不到模块 `@ember/application`

javascript - ember-api-actions collectionAction 引发错误无法读取未定义的属性 'constructor'

ember.js - 在输入助手中调用 ember handlebars 助手

javascript - Chrome 在从 libwebsockets 接收时说 "Could not decode a text frame as UTF-8"

browser - 调试二进制 websockets 框架