Sto facendo davvero semplice applicazione per aiutarmi a scoprire nodejs e ho un particolare gestore che genera il codice HTML sulla base dei messaggi Top10 nel mio database. Lo snippet Sto avendo problemi con i loop attraverso i messaggi e chiama la funzione che genera HTML e aggiunge il risultato alla mia stringa html.Node.js per() ciclo di ritorno gli stessi valori ad ogni ciclo
function CreateMessageboard(BoardMessages){
var htmlMessageboardString = "";
[... Console debug code ...]
for(var i = 0; i < BoardMessages.length;i++){
(function(){
var j = i;
console.log("Loading message %d".green, j);
htmlMessageboardString += MessageToHTMLString(BoardMessages[j]);
})();
}
}
Penso che il mio problema è dovuto al modo di gestire cicli, legati alla chiusura da quanto ho letto sia di Javascript e questo è quello che ho provato ad utilizzare al di sopra o il modo asincrono nodejs gestisce la mia funzione. In questo momento i 10 risultati sono ben restituiti dal db ma l'ultimo messaggio viene elaborato ad ogni ciclo.
ho anche provato, invece di fare var j = i, per prendere i valore come parametro di funzione e passarlo nella chiusura e tornati gli stessi risultati comunque.
Ho la sensazione che mi manca la conoscenza fondamentale per risolvere il mio problema, posso avere luce su questo argomento?
Modifica: Sono libero di fornire altre informazioni sul codice, pubblicherei l'intero repository Git ma probabilmente le persone non vogliono nuotare attraverso un intero progetto per aiutarmi a eseguire il debug di questo problema, quindi ho postato il tutta la funzione nei commenti per fornire più contesto.
Dovrebbe funzionare anche senza la funzione, dal momento che non si hanno altre chiusure che potrebbero catturare involontariamente 'i'. È questo il tuo codice esatto? –
Come dice @MatthewFlaschen, il codice sembra buono. Tuttavia, puoi provare 'function (i) {......}) (i);' così che non ci sia dubbio che 'i' viene catturato. –
Sospetto che sia necessario includere più contesto; l'errore non sembra essere qui – Kato