在Windows 8 html5的挂起状态事件处理程序中写入文本文件

writing text file in suspend state event handler in windows 8 html5

本文关键字:文本 文件 程序 事件处理 Windows html5 挂起状态      更新时间:2023-09-26

我试图写一个文本文件时,暂停事件被触发即在winjs.application.oncheckpoint事件处理程序。我写我的对象JSON文本。下面是代码:

        applicationData.localFolder.createFileAsync("dataFile.txt", Windows.Storage.CreationCollisionOption.replaceExisting).then(function (sampleFile) {
            var stringData = "";
            var i;
            for (i = 0 ; i < myData.objData.length - 1 ; i++) {
                stringData += '{"title":"' + myData.objData[i].title + '","challange":"' + myData.objData[i].challange + '"},'n';
            }
            stringData += '{"title":"' + myData.objData[i].title + '","challange":"' + myData.objData[i].challange + '"}';
            stringData = "[" + stringData + "]";
            return Windows.Storage.FileIO.writeTextAsync(sampleFile, stringData);
        }).done(function () { });

但是Windows应用程序在向文本文件中写入任何内容之前关闭。我调用args.setPromise()并将上述代码作为函数参数传递,但同样的问题仍然存在。

PS:我不知道如何做异步正确。请帮助。

就像Phil评论的那样,删除.done()会修复它。

这是因为done()不返回任何东西,而then()返回链式承诺。这就是没有调用的原因。

还建议在应用程序数据发生变化时立即或间隔一段时间保存数据,而不是等待挂起事件来保存所有内容。暂停事件的时间为5秒。否则,按照这里的MSDN文档终止应用程序。

"如果一个应用程序在5秒内没有从挂起事件返回,Windows认为该应用程序已经停止响应并终止它"

app.oncheckpoint = function (args) {
app.sessionState.history = nav.history;
args.setPromise(Windows.Storage.ApplicationData.current.localFolder.createFileAsync
    ("dataFile.txt", Windows.Storage.CreationCollisionOption.replaceExisting).then(function (sampleFile) {
        var stringData;
        // code to set stringData.
        return Windows.Storage.FileIO.writeTextAsync(sampleFile, stringData);
    }));

};

Just event.setPromise(applicationData.localFolder.createFileAsync ...)

然后挂起将等待,直到您的承诺完成。删除.done