WinJS 变量只在函数内部改变
WinJS variable is changed only inside function
我对 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。对不起我的英语不好。它并不完美:)
I think it is problem with readTextAsync, because when I fill variable in function without readTextAsync, it is working.
我根据你上次 post 的代码做出了这个回答。Windows.Storage.FileIO.readTextAsync
是一个 windows 异步 api。所以它应该以异步方式处理:console.log("główna " + fileDate)
应该在 loadDate().then()
中处理,如下所示,fileContent
应该返回,你可以在 loadDate().then(function(data){})
.[=17 中捕获它=]
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");
});
}
我对 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。对不起我的英语不好。它并不完美:)
I think it is problem with readTextAsync, because when I fill variable in function without readTextAsync, it is working.
我根据你上次 post 的代码做出了这个回答。Windows.Storage.FileIO.readTextAsync
是一个 windows 异步 api。所以它应该以异步方式处理:console.log("główna " + fileDate)
应该在 loadDate().then()
中处理,如下所示,fileContent
应该返回,你可以在 loadDate().then(function(data){})
.[=17 中捕获它=]
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");
});
}