2016-07-28 8 views
1

Ich habe ein Problem mit dem Variablenbereich in WinJS. Wenn die Variable geändert wird, sollte sie in einem größeren Bereich sichtbar sein, aber nach der Aufruffunktion hat diese Variable nur einen Wert innerhalb der Funktion. Ich denke, es ist ein Problem mit readTextAsync, denn wenn ich Variable in Funktion ohne readTextAsync fülle, funktioniert es. DieseWinJS Variable wird nur innerhalb der Funktion geändert

ist Variablendeklaration:

var fileDate; 

Das ist Funktion, wo ich eine andere nennen:

WinJS.UI.Pages.define("index.html", { 
     ready: function (element, options) { 
      loadDate(); 
      console.log("główna " + fileDate); //fileDate = undefined 
      this.fillYearSelect(); 
     }, 

Und dies ist eine Funktion, in der Variable geändert wird:

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. Entschuldigung für mein Englisch. Es ist nicht perfekt :)

Antwort

1

Ich denke, es Problem mit readTextAsync ist, denn wenn ich variabel in Funktion ohne readTextAsync füllen, es funktioniert.

Ich habe diese Antwort von Ihrem letzten Beitrag Codes gemacht. Windows.Storage.FileIO.readTextAsync ist eine Windows async API. So sollte es async gehandhabt werden: console.log("główna " + fileDate) sollte in loadDate().then() wie unten behandelt werden und fileContent sollte zurückgegeben werden, und Sie können es in loadDate().then(function(data){}) fangen.

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

Es ist am Leben! Ich muss etwas in meinem Code ändern, aber Ihre Lösung ist sehr hilfreich. Vielen Dank. –

Verwandte Themen