1

我正在尝试在触发暂停事件时编写一个文本文件,即在 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:我不知道如何正确地异步执行它。请帮忙。

4

2 回答 2

2

只是event.setPromise(applicationData.localFolder.createFileAsync ...)

然后暂停将等到您的承诺完成。去除.done

于 2013-05-25T13:20:46.213 回答
2

就像菲尔评论的那样,删除.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);
    }));

};

于 2013-05-26T03:25:45.863 回答