Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
breeze saveChanges()多次发送相同的数据_Breeze - Fatal编程技术网

breeze saveChanges()多次发送相同的数据

breeze saveChanges()多次发送相同的数据,breeze,Breeze,我有一个entityManager,其中包含entityStatus为“Added”的实体。 当网站离线时,我想添加新的实体并将它们导出到LocalStorage。当网站再次上线时,我需要将实体导入回管理器,并将它们发送到服务器数据库 除了一件事之外,我已经实现了这一点:如果我在脱机模式下打开了几个浏览器窗口,breeze将尝试从所有页面发送数据。当出现internet连接时,打开的浏览器窗口中的所有脚本将同时发送相同的数据。因此,我的数据库中有几个相同的记录 更新:删除本地存储中保存的条目不是

我有一个entityManager,其中包含entityStatus为“Added”的实体。 当网站离线时,我想添加新的实体并将它们导出到LocalStorage。当网站再次上线时,我需要将实体导入回管理器,并将它们发送到服务器数据库

除了一件事之外,我已经实现了这一点:如果我在脱机模式下打开了几个浏览器窗口,breeze将尝试从所有页面发送数据。当出现internet连接时,打开的浏览器窗口中的所有脚本将同时发送相同的数据。因此,我的数据库中有几个相同的记录

更新:删除本地存储中保存的条目不是最佳解决方案,因为发送可能失败,我将丢失数据。在发送回调中删除本地存储条目也不能解决问题,因为在那个时候,所有打开的窗口都已经从本地存储中获取了数据,并且会将副本发送到数据库


避免多个页面多次保存的策略是什么?

我不完全确定我是否理解这个问题。再详细一点会有帮助的。但根据您所说的,我假设客户机首次启动时的第一步是从localStorage检索导出的一组实体,然后尝试保存它。我的建议是,每个客户机在读入localStorage后应立即清除它,以便任何其他客户机都不会尝试重播相同的更改,然后仅在客户机无法连接到服务器时将数据写回localStorage


但不确定这是否是你的问题

这是不可能的,因为在脱机模式下,浏览器窗口可能会关闭,我会丢失数据。只有成功发送到服务器后,我才能从本地存储中删除。问题是当internet出现时会触发saveChanges()函数。。现在,所有打开的windows中的脚本都可以从本地存储中读取。我相信这不可能通过breeze实现,因为breeze对网站的其他开放浏览器实例一无所知。我说得对吗?我认为唯一的解决方案是在服务器端检查条目是否存在于数据库中。