0

我只是想从 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 字符串?现在我只是在创建和使用一个文本文件。

4

2 回答 2

1

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

你需要回报一个承诺。

于 2012-12-12T04:03:42.020 回答
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 应用程序(在 codeplexWindows Store 中)中的 Promises 演示也可以帮助您了解这个概念。

于 2012-12-12T16:00:27.400 回答