我的 Ember/Ember-Data/Rails 应用程序使用 WebSockets 将数据推送到客户端。我正在使用 Ember-Data 的 loadMany 方法将推送的数据添加到存储中。
但是,如果当前正在编辑和保存任何推送的记录,则 loadMany 将失败,因为该记录当前处于 inFlight 状态。例如:
-> 用户编辑记录并点击保存
-> Ember-Data 开始提交当前事务
-> Rails 控制器响应此记录的更新 JSON 并通过 WebSockets 发布更新数据
-> 在事务完成之前接收到 WebSockets 数据,Ember -在记录被标记为干净之前,数据尝试使用此新数据更新记录
我发现的唯一解决方案是使用 Ember.run.later 延迟应用更新,超时时间约为 20 毫秒。(Ember.run.next 不起作用。)
但是,这只处理用户刚刚保存记录的情况。如果巧合的是,用户当前正在编辑的记录被其他人编辑,并且在事务完成之前收到推送更新,那么冲突仍然会发生并触发错误。
所以我的问题是,有没有办法:
(a) 防止商店在受影响的记录进行中时尝试加载更改;或者 (b) 延迟推送更新,直到所有事务都清理干净?