2017-03-10 1 views
0

Ich versuche, ein Array basierend auf Zeilen in einer .txt Datei mit jQuery zu erstellen. Das Array ist eine Liste mit Antworten für ein Spiel.Globale Variable wird nicht aktualisiert, wenn ich ihr einen Wert innerhalb einer Funktion zuweise

Die Konsole protokolliert beim ersten Mal ein Array mit Inhalt, aber beim zweiten Mal ein leeres Array. Warum wird answers nicht global aktualisiert?

Hier ist mein Code:

//create global variable answers 
var answers = new Array; 
//assign a value to answers from text file 
$.get("wordsEn.txt", function(txt){ 
    answers = txt.split('\n'); 
    console.log(answers); 
}); 
console.log(answers); 
+4

Der Aufruf der Funktion erfolgt nicht synchron, daher wurde sie bei der Protokollierung noch nicht aktualisiert. –

+0

tatsächlich wird es leere Array das erste Mal und der Inhalt zum zweiten Mal loggen – CaptainHere

Antwort

0

Sie benötigen eine Funktion Insite die synchron funktionieren somthing nennen wie

//create global variable answers 
var answers = new Array; 
var cb = function(){ 
    console.log(answers); 
}; 
//assign a value to answers from text file 
$.get("wordsEn.txt", function(txt){ 
    answers = txt.split('\n'); 
    console.log(answers); 
    if(cb) 
     cb(); 
}); 
+0

Da 'console.log()' ist nicht alles, was ich tun möchte (es gibt ein ganzes Spiel basierend auf der Erstellung dieser Variable), mache ich muss ich meinen ganzen folgenden Code in die '$ .get()' Funktion schreiben? – wpbdry

+0

ja, Sie sollten den gesamten Code in die $ .get() oder rufen Sie eine Funktion innerhalb. –

0

Die console.log(answers); außerhalb der Rückruf vor die Zuordnung geschieht.

$.get kehrt sofort zurück, aber Callback wird nicht unbedingt sofort ausgeführt; es kann eine Weile dauern, um die Daten zu holen. In der Zwischenzeit wird der äußere console.log(answers); ausgeführt.

0

Sie haben zwei Anrufe console.log, so ein Problem ist, dass Sie nicht wissen können, welche man zuerst geschieht, weil man synchron geschieht und die andere asynchron. Für den Anfang, wenn Sie so debuggen, sollten Sie einige zusätzliche Informationen in Ihre Log-Anweisung setzen:

console.log('1: ' + answers); 
console.log('2: ' + answers); 

auf diese Weise, wenn Sie die Ausgabe sehen werden Sie wissen, wenn 2 zuerst passiert ist, oder 1 geschah zuerst.

Wie andere gesagt hat, die innere Funktion im $.get Code verwendet geschieht asynchron, was bedeutet, es nach der Ajax-Request beendet ausgeführt wird, die manchmal schnell oder langsam sein könnte, Sie haben keine Möglichkeit zu wissen.

Verwandte Themen