Sono sicuro che il mio problema si basa su una mancanza di comprensione della programmazione asynch in node.js ma qui va.Node.JS: come passare variabili a callback asincroni?
Ad esempio: ho un elenco di collegamenti che desidero sottoporre a scansione. Quando viene restituita una richiesta asincrona, desidero sapere a quale URL è destinato. Ma, presumibilmente a causa delle condizioni di gara, ogni richiesta ritorna con l'URL impostato sull'ultimo valore nell'elenco.
var links = ['http://google.com', 'http://yahoo.com'];
for (link in links) {
var url = links[link];
require('request')(url, function() {
console.log(url);
});
}
uscita prevista:
http://google.com
http://yahoo.com
uscita effettiva:
http://yahoo.com
http://yahoo.com
Quindi la mia domanda è o:
- Come faccio a passare url (in valore) al richiamare la funzione? OR
- Qual è il modo corretto di concatenare le richieste HTTP in modo che vengano eseguite in sequenza? OR
- Qualcos'altro che mi manca?
PS: Per 1. Non voglio una soluzione che esamina i parametri del callback ma un modo generale di un callback conoscendo le variabili 'dall'alto'.
Non si tratta di ambito. Si tratta di chiusure. Molte altre lingue non hanno ancora un ambito di blocco, ma non affrontano questo problema a causa della mancanza di chiusure. – slebetman
Il punto è che se JavaScript supportava l'ambito del blocco, allora l'accesso di chiusura a 'url' nella funzione di callback del codice dell'OP funzionerebbe perché ogni iterazione del ciclo avrebbe la propria variabile' url' (come in C#). – JohnnyHK
Il requisito è solo lì per brevità, nel mio codice tutto ciò che richiede è all'inizio. – Marc