我在WinJS中遇到了变量范围问题。当变量被更改时,它应该在更大的范围内可见,但是在调用函数之后,该变量仅在函数内部具有值。我认为这是readTextAsync的问题,因为当我在没有readTextAsync的函数中填充变量时,它正在工作。
这是变量声明:
var fileDate;
这是我称之为另一个的功能:
WinJS.UI.Pages.define("index.html", {
ready: function (element, options) {
loadDate();
console.log("główna " + fileDate); //fileDate = undefined
this.fillYearSelect();
},
这是函数,其中变量已更改:
localFolder.getFileAsync(filename).then(function (file) {
Windows.Storage.FileIO.readTextAsync(file).done(function (fileContent) {
fileDate = fileContent; // example - fileDate=a073z160415
console.log("fileDate " + fileDate);
},
function (error) {
console.log("Reading error");
});
},
function (error) {
console.log("File not found");
});
}
P.S。对不起我的英语不好。这并不完美:)
答案 0 :(得分:1)
我认为这是readTextAsync的问题,因为当我在没有readTextAsync的函数中填充变量时,它正在工作。
我从你上一篇文章的代码中得到了这个答案。Windows.Storage.FileIO.readTextAsync
是一个windows async api。所以它应该以异步方式处理:console.log("główna " + fileDate)
应该在loadDate().then()
中处理,如下所示,并且应该返回fileContent
,你可以在loadDate().then(function(data){})
中捕获它。
WinJS.UI.Pages.define("index.html", {
ready: function (element, options) {
loadDate().then(function(data){
fileDate=data; //here catch the fileContent data
console.log("główna " + fileDate);
});
this.fillYearSelect();
},
function loadDate() {
var that = this;
var filename = "abc.txt";
return Windows.Storage.ApplicationData.current.localFolder.getFileAsync(filename).then(function (file) {
return Windows.Storage.FileIO.readTextAsync(file).then(function (fileContent) {
return fileContent;//here return the fileContent.You can catch it outside.
},
function (error) {
console.log("Błąd odczytu");
});
},
function (error) {
console.log("Nie znaleziono pliku");
});
}