我只是尝试从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字符串吗?现在我只是创建并使用文本文件。
答案 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 codeplex和in the Windows Store)中的Promises演示也可以帮助您了解这个概念。