T..K: Abarbeitung abwarten

Hey,

ich hoffe Ihr könnt mir helfen.

Ich habe folgende zwei Funktionen und würde gern aus der ersten die zweite aufrufen lassen. Scheinbar wird aber die erste Funktion weiter bearbeitet, bevor in der zweiten Funktion die Datei vollständig geladen wurde. Damit wird bei "return" nichts zurückgegeben.

 function changeString(){
	var allowedWordsString;
	var allowedWordsArray;
			
	allowedWordsString = this.loadTextFile();
	
	alert("Text: " + allowedWordsString);
	
	allowedWordsArray = allowedWordsString.split(",");
}
function loadTextFile(){
	jQuery.get("text.txt", function(data) {
		alert(data.length);
		var text = data;
		return text;
	});
}

Gibt es dafür eine Lösung / Möglichkeiten, um das Laden der Datei vollständig abzuwarten oder muss ich die Datei auf andere Weise einlesen lassen?

Schon einmal vielen Dank für Eure Mühe!

Liebe Grüße Tim

akzeptierte Antworten

  1. Tach!

    Ich habe folgende zwei Funktionen und würde gern aus der ersten die zweite aufrufen lassen. Scheinbar wird aber die erste Funktion weiter bearbeitet, bevor in der zweiten Funktion die Datei vollständig geladen wurde. Damit wird bei "return" nichts zurückgegeben.

    Richtig, jQuery.get() arbeitet asynchron. Wenn es fertig ist, ruft es die als Parameter success übergebene Funktion auf. Darein muss dein Zeug, das nach Erledigung ausgeführt werden soll.

    Alternativ liefert get() ein sogenanntes Promise, von dem kann man unter anderem die Methode done() aufrufen und eine Callback-Funktion übergeben.

    dedlfix.

  2. Liebe(r) T..K,

    um zu präzisieren, was dedlfix bereits sagte:

    function changeString(){
    	jQuery.get("text.txt", function(data) {
    
    		allowedWordsArray = data.split(",");
    
    		console.dir(allowedWordsArray); // Ausgabe in der Konsole
    	});
    }
    

    Liebe Grüße,

    Felix Riesterer.

    1. Danke euch beiden!

    2. um zu präzisieren, was dedlfix bereits sagte:

      function changeString(){
      	jQuery.get("text.txt", function(data) {
      
      		allowedWordsArray = data.split(",");
      
      		console.dir(allowedWordsArray); // Ausgabe in der Konsole
      	});
      }
      

      Und so sähe die Promise-Variante aus, die @dedlfix ebenfalls schon erwähnt hat:

      const getText = jQuery.get("text.txt");
      getText.done(function(data) {
         const allowedWordsArray = data.split(",");
         console.dir(allowedWordsArray);
      });
      

      Der Vorteil von Promises gegenüber der Callback-Lösung ist, dass man Promises, wie andere Objekte auch, herumreichen kann, als Rückgabewert oder Parameter einer Funktion zum Beispiel. Promises sind first-class Datentypen, um den Kontrollfluss zu steuern. In diesem kleinen Beispiel zeigt sich der Vorteil allerdings nicht.