Javascript Windows 8从文件夹读取文件,返回字符串

时间:2012-12-12 04:00:07

标签: javascript windows-8

我只是尝试从Windows 8应用程序的漫游文件夹中读取文件,并返回一个字符串。 console.log(text)正在打印正确的字符串,但我显然要么不理解承诺和延迟,要么搞乱了javascript。 str未定义。

var getJsonString = function () {
    var jsonText;
    roamingFolder.getFileAsync(fileName)
            .then(function (file) {
                return Windows.Storage.FileIO.readTextAsync(file);
            }).done(function (text) {
               //Printing Correct String
                console.log(text);
                jsonText = text;
            });
    return jsonText;
}

var str = getJsonString();
console.log(str);

我看过MSDN文章http://msdn.microsoft.com/en-us/library/windows/apps/hh465123,但仍然感到困惑。有人有想法吗?

编辑:实际上有更好的方法在漫游文件夹中存储JSON字符串吗?现在我只是创建并使用文本文件。

2 个答案:

答案 0 :(得分:1)

您的代码异步done()回调在函数其余部分完成后的某个时间发生。

你需要回复一个承诺。

答案 1 :(得分:0)

这样的事情应该做到......

var getJsonStringAsync = function() {
    return roamingFolder.getFileAsync("myData.json")
        .then(function(file) {
            return Windows.Storage.FileIO.readTextAsync(file);
        });
};

getJsonStringAsync().then(function(text) {
    console.log(text);
});

看看你的getJsonStringAsync函数现在如何返回.then()函数的结果?那个.then()函数返回一个Promise。我已经重命名了你的函数添加Async后缀,因为它现在是一个异步函数,这就是惯例。

现在,只要你使用该函数,就可以调用它并使用.then()(或.done())并指定一个函数,其参数是promise为您提供的数据。

希望这会有所帮助。您可以查看codefoster.com/using-promises以获取更多信息,我在codeSHOW应用程序(on codeplexin the Windows Store)中的Promises演示也可以帮助您了解这个概念。