WinJS变量仅在函数内部更改

时间:2016-07-28 07:17:30

标签: javascript variables scope uwp winjs

我在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。对不起我的英语不好。这并不完美:)

1 个答案:

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