WinJS:保存重要信息的最佳方式

时间:2016-03-19 11:01:14

标签: javascript windows-store-apps winjs

我有一个我为我的公司创建的Windows应用商店应用。我的公司已经成功使用了几个月,但我们偶尔会因读取保存的数据而出错;我找到了一种最小化这些数据保存和读取错误的方法非常非常重要。

让我具体一点:我的应用程序本质上是一个时间表应用程序:员工可以使用我的应用程序登录和停止工作。我将每个班次保存到Azure数据库,但由于互联网不可靠,我将移位对象以JSON.stringify格式保存到localdata中的文件中。我使用这个函数来写信息(并且在开始或完成班次的任何时候我写入文件都很漂亮):

            jsonWrite: function (fileName, object) {
                return localFolder.createFileAsync(fileName, Windows.Storage.CreationCollisionOption.openIfExists)
                    .then(function (file) {
                        return Windows.Storage.FileIO.writeTextAsync(file, JSON.stringify(object));
                    })
            }

我使用此功能读取应用启动时加载的信息:

            jsonRead: function (fileName) {
                return localFolder.createFileAsync(fileName, Windows.Storage.CreationCollisionOption.openIfExists)
                    .then(function (file) {
                        return Windows.Storage.FileIO.readTextAsync(file)
                    })
                    .then(function(text) {
                        return text ? JSON.parse(text) : null;
                    })
            },

只是偶尔会在写入文件时出错。我稍后会在应用程序再次启动并且其中一个文件采用非JSON.parsable格式时发现错误。

现在,最明显的解决方案 - 但不正确的解决方案 - 是为不正确的文件读取设置某种错误处理程序,以初始化无法读取的文件的数据。但我不能这样做,因为如果一个文件不可读,那意味着员工工作的潜在变化已经丢失 - 我不能只是默默地在那里失败;我需要知道这些数据已经丢失,因为它显然非常重要,所以到目前为止,我已经允许应用程序在极少数情况下崩溃(这种情况可能在5个月内发生3次)。

我已经阅读了其他数据存储解决方案,而不仅仅是将文本写入文件 - IndexDB,存储容器等。

鉴于我可以保存最多32Kb的数据,最合适的选择是什么?我如何避免数据丢失?

1 个答案:

答案 0 :(得分:1)

绝对是一个奇怪的解决方案。 IndexedDB可能是您最好的选择。没有针对异常的Try / Catch,不确定如何避免数据丢失。

有没有办法在本地存储数据,直到您可以将其与在线数据库进行比较,进行比较,然后使用您认为最合适的数据?

是否可以向最终用户发出警告,说明文件未正确保存,从而请求他们再次输入信息?