Websocket 如何使用余烬数据加载推式记录更新,而不与机上事务冲突?

Websocket 如何使用余烬数据加载推式记录更新,而不与机上事务冲突?,websocket,ember.js,ember-data,Websocket,Ember.js,Ember Data,我的Ember/Ember Data/Rails应用程序使用WebSocket将数据向下推送到客户端。我使用Ember data的loadMany方法将推送数据添加到存储中 但是,如果当前正在编辑和保存任何推送记录,loadMany将失败,因为该记录当前处于飞行状态。e、 g: ->用户编辑记录并单击保存 ->余烬数据开始提交当前事务 ->Rails控制器对此记录使用更新的JSON进行响应,并通过WebSockets发布更新的数据 ->WebSockets数据是在事务完成之前接收的,并且在记录标

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

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

->用户编辑记录并单击保存
->余烬数据开始提交当前事务
->Rails控制器对此记录使用更新的JSON进行响应,并通过WebSockets发布更新的数据
->WebSockets数据是在事务完成之前接收的,并且在记录标记为干净之前,Ember data会尝试使用此新数据更新记录

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

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

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

(a) 防止存储在受影响的记录正在运行时尝试加载更改;或
(b) 延迟推送更新直到所有事务都已清除?

*crickets*

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