Closed fenglisch closed 1 year ago
irgendwo scheint da noch der Wurm drin zu sein. :(
Ein console.log(intParties)
nach der Funktion gibt mir die Funktion aus aber nicht die Anzahl der Parteien / Vereine. Ein console.log(arIntParties)
innerhalb der Funktion wird gar nicht angezeigt.
Dementsprechend kann die Auswertung am Ende auch nicht angezeigt werden.
Ich habe noch nicht herausgefunden, woran es liegt.
Daneben gibt es noch die Funktion fnReadCsv(csvFile,fnCallback)
weiter unten. Das war meine Spar-Variante um die FRAGEN.CSV und PARTEIEN.CSV mit einer Funktion abzufrühstücken. Wenn jetzt die PARTEIEN.CSV noch einmal gelesen wird, kann man das auch komplett umstellen. :)
So. Ich glaube, ich bin dem Problemchen ein bisschen näher gekommen.
intParties
muss natürlich noch aufgerufen werden, weil es eine Funktion ist. Also z.B. die const intParties = () => {
umbenennen in const functionIntParties = () => {
und danach erfolgt der Aufruf über const intParties = functionIntParties();
Aber die Variable ist weiterhin undefined
. Wenn ich mich recht entsinne, liegt das daran, dass $.ajax({}).done()
den return
-Wert nicht nach außen gibt. Das geht nur über eine Callback-Funktion.
Wie so etwas aussieht, kann man z.B. bei function fnReadCsv(csvFile,fnCallback)
sehen. Im DONE-Bereich wird das DATA-Ergebnis aus der Ajax-Abfrage an die Übergabefunktion weiter gegeben. Dort wird damit weiter gerechnet.
.done(function(data) {
console.log("Mat-o-Wahl load: "+csvFile);
fnCallback(data);
})
Die fnReadCsv()
wird 2x aus /DATA/OUTPUT.JS/fnStart()
aufgerufen (ca. Zeile 96 / 99). Als Rückgabe-Funktion landen die Werte aus den FRAGEN.CSV und PARTEIEN.CSV in /DATA/GENERAL.JS/fnShowQuestions()
und /DATA/GENERAL.JS/fnReadPositions()
.
Bevor dort jeweils fnTransformCsvToArray()
ausgeführt wird, sollten die Variablen intQuestions
und intParties
definiert sein. Das könnte z.B. über deine (zusätzliche?) "Säuberungs-Funktion" geschehen.
Autsch, da habe ich beim Testing ja ganz schön geschludert. Danke fürs Fehler finden!
Daneben gibt es noch die Funktion fnReadCsv(csvFile,fnCallback) weiter unten. Das war meine Spar-Variante um die FRAGEN.CSV und PARTEIEN.CSV mit einer Funktion abzufrühstücken. Wenn jetzt die PARTEIEN.CSV noch einmal gelesen wird, kann man das auch komplett umstellen. :)
Da ich dachte, dass es keine Callback Function braucht, dachte ich, dass die fnReadCsv nicht geeignet wäre. So ist das aber natürlich was anderes. Die eingebauten Funktionen für error
und fail
sowie console.log("Mat-o-Wahl load: "+csvFile);
passen zwar nicht perfekt, aber problematisch sollten sie ja auch nicht sein.
Mit den neuesten Commits sollte das gefixed sein. Bei mir hat es jedenfalls gut funktioniert. Vielleicht fällt dir auch eine elegantere Lösung ein, als window.intParties
als Vehikel zu verwenden
:) Ja, bei mir hat es auch funktioniert.
Ich habe die Funktion in GENERAL.JS/fnReadPositions()
verschoben, wo bereits das Ajax-Ergebnis ausgewertet wird. So muss die PARTEIEN.CSV kein zweites Mal ausgelesen werden. ;) Das zog dann nur noch ein paar kleinere Änderungen nach sich. Siehe:
Wenn das bei dir auch weiterhin funktioniert, kannst du es gern als neue Version 0.6.0.8.JJJJMMTT
veröffentlichen. (general.js und changelog.md
)
Ah ja, das ist deutlich eleganter. Hab mich erst gewundert, weil in der output.js ja zuerst fnReadCsv -> fnShowQuestions -> fnTransformCsvToArray kommt und in der fnTransformCsvToArray ja intParties bereits vorkommt, bevor es berechnet wurde (else { lastLine = (5 + intQuestions + 1) * intParties -1}
). Aber in diese else-clause kommt es ja nur, wenn fnTransformCsvToArray mit dem Parameter modus = 0 aufgerufen wird.
Anstatt die intParties nach jedem Update in der definition.js aktualisieren zu müssen, könnte diese auch dynamisch berechnet werden (aus der Länge der fileAnswers und der Zahl der Fragen).