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");
            });
        }