2016-07-27 2 views
1

Мне нужно прочитать содержимое из файла. У меня есть глобальная переменная fileDate, и я хочу поместить содержимое этой переменной, но когда я вызываю метод load, переменная не определена.readTextAsync WinJS не может работать

var filename = "dataFile.txt"; 
    var fileDate; 

WinJS.UI.Pages.define("index.html", { 
     ready: function (element, options) { 
      loadDate(); 
      console.log("main" + fileDate); 
      this.fillYearSelect(); 
     }, 

    function loadDate() { 
     return localFolder.getFileAsync(filename).then(function (file) { 
      return Windows.Storage.FileIO.readTextAsync(file).then(function (fileContent) { 
       fileDate = fileContent; 
       console.log("fileContent " + fileContent); 
      }, 
      function (error) { 
       console.log("Błąd odczytu"); 
      }); 
     }, 
     function (error) { 
      console.log("Nie znaleziono pliku"); 
     }); 
    } 

Извините за мой английский :)

ответ

1

Не забывайте, что Javascript является асинхронным, при вызове console.log("main" + fileDate), метод loadDate() не закончена, и именно поэтому ваш FILEDATE не определен (пока) ,

Вы можете использовать обещания для достижения этой цели.

Вот пример, основанный на коде:

var filename = "dataFile.txt"; 
var fileDate; 

var applicationData = Windows.Storage.ApplicationData.current; 
var localFolder = applicationData.localFolder; 

function loadDate() { 
    return new Promise(function (onComplete, onError) { 
     localFolder.getFileAsync(filename).then(function (file) { 

      Windows.Storage.FileIO.readTextAsync(file).then(function (fileContent) { 
       fileDate = fileContent; 
       console.log("fileContent " + fileContent); 

       onComplete(fileDate); 
      }, 
      function (error) { 
       console.log("Error on readTextAsync"); 
       onError(error); 
      }); 
     }, 
     function (error) { 
      console.log("Error on getFileAsync"); 
      onError(error); 
     }); 
    }); 
} 

Теперь loadDate() возвращает обещание, теперь вы можете использовать метод .then() делать вещи, когда loadDate() закончена.

loadDate().then(function (fileDate) { 
     console.log("Content : " + fileDate); 
    }, 
    function (error) { 
     console.log(error); 
    });