【问题标题】:Win 8 Apps : saving and retrieving data in roamingfolderWin 8 应用程序:在漫游文件夹中保存和检索数据
【发布时间】:2013-03-01 21:17:40
【问题描述】:

我正在尝试使用 JavaScript 在应用程序中将少量用户数据存储到 Windows 存储的 roamingFolder 方法/属性中。我正在关注开发中心的示例代码,但没有成功。我的代码 sn-p 如下:(或完整项目的 SkyDrive 链接:https://skydrive.live.com/redir?resid=F4CAEFCD620982EB!105&authkey=!AE-ziM-BLJuYj7A

filesReadCounter: function() {
roamingFolder.getFileAsync(filename)
    .then(function (filename) {
        return Windows.Storage.FileIO.readTextAsync(filename);
    }).done(function (data) {
        var dataToRead = JSON.parse(data);
        var dataNumber = dataToRead.count;
        var message = "Your Saved Conversions";
        //for (var i = 0; i < dataNumber; i++) {
        message += dataToRead.result;
        document.getElementById("savedOutput1").innerText = message;
        //}
        //counter = parseInt(text);
        //document.getElementById("savedOutput2").innerText = dataToRead.counter;
    }, function () {
        // getFileAsync or readTextAsync failed.
        //document.getElementById("savedOutput2").innerText = "Counter: <not found>";
    });
},

filesDisplayOutput: function () {
    this.filesReadCounter();
}

我在导航器模板的 item.js 文件的 ready 方法中调用 filesDisplayOutput 函数,以检索上次会话的数据。但它总是显示空白。我想最多保存 5 个用户可能需要保存的数据。

【问题讨论】:

    标签: windows-8 windows-runtime winjs


    【解决方案1】:

    我在按原样运行您的代码时遇到了一些麻烦,但这与问题无关。最重要的是,您实际上并没有阅读该文件。请注意这段代码,当 promise 实现时,没有 thendone 可以执行。

    返回 Windows.Storage.FileIO.readTextAsync(文件名);

    我在你的示例解决方案中破解了这个,它正在工作......这方面的典型警告不是生产代码:)

    filesReadCounter: function () {
            roamingFolder.getFileAsync(filename).then(
                function (filename) {
                    Windows.Storage.FileIO.readTextAsync(filename).done(
                        function (data) {
                            var dataToRead = JSON.parse(data);
                            var dataNumber = dataToRead.count;
                            var message = "Your Saved Conversions";
                            //for (var i = 0; i < dataNumber; i++) {
                            message += dataToRead.result;
                            document.getElementById("savedOutput1").innerText = message;
                            //}
                            //counter = parseInt(text);
                            //document.getElementById("savedOutput2").innerText = dataToRead.counter;
    
                        }, function () {
    
                            // readTextAsync failed.
                            //document.getElementById("savedOutput2").innerText = "Counter: <not found>";
                        });
                },
                function () {
                    // getFileAsync failed 
                })
        },
    

    【讨论】:

    • 但是嵌套promise的返回值不应该传递给父promise的下一个延续吗?当你这样写时,内部函数不会返回一个承诺,使外部函数无法等待任务的完成(假设在某些时候可能需要这样做)。
    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多