2016-07-28 50 views
1

我在WinJS中有變量作用域的問題。當變量被改變時,它應該在更大範圍內可見,但是在調用函數之後,該變量僅在函數內部具有值。我認爲這是readTextAsync的問題,因爲當我在沒有readTextAsync的函數中填充變量時,它正在工作。WinJS變量只在函數內部變化

這是變量聲明:

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

附:對不起我的英語不好。它不完美:)

回答

1

我認爲這是readTextAsync的問題,因爲當我在沒有readTextAsync的函數中填充變量時,它正在工作。

我是從你上一篇文章的代碼做出這個答案的。 Windows.Storage.FileIO.readTextAsync是一個Windows異步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"); 
      }); 
     } 
+0

它還活着!我必須改變我的代碼,但是你的解決方案是非常有用的。謝謝。 –