2013-06-07 11 views
6

Non posso per la vita di me trovare la risposta a questo. Come si passa un parametro alla funzione iteratore per async.each utilizzando il modulo nodo async.js di caolan? Voglio riutilizzare l'iteratore ma è necessario salvare le cose con un prefisso diverso basato sul contesto. Quello che ho trovato è:Come si passa un argomento alla funzione iteratore per async.each?

async.each(myArray, urlToS3, function(err){ 
    if(err) { 
     console.log('async each failed for myArray'); 
    } else { 
     nextFunction(err, function(){ 
      console.log('successfully saved myArray'); 
      res.send(200); 
     }); 
    } 
}); 

function urlToS3(url2fetch, cb){ 
    //get the file and save it to s3 
} 

Quello che mi piacerebbe essere in grado di fare è:

async.each(myArray, urlToS3("image"), function(err){ 
    if(err) { 
     console.log('async each failed for myArray'); 
    } else { 
     nextFunction(err, function(){ 
      console.log('successfully saved myArray'); 
      res.send(200); 
     }); 
    } 
}); 

function urlToS3(url2fetch, fileType, cb){ 
    if (fileType === "image") { 
    //get the file and save it to s3 with _image prefix 
    } 
} 

ho trovato qualcosa di una domanda simile per CoffeeScript ma la risposta non ha funzionato. Sono aperto a refactoring nel caso in cui sto cercando di fare qualcosa che non è solo idiomatico, ma sembra una cosa così logica da fare.

risposta

15

È possibile creare una funzione di parziale utilizzando bind:

async.each(myArray, urlToS3.bind(null, 'image'), ...); 

L'argomento 'image' sarebbe passata come primo argomento alla funzione (il resto degli argomenti sarebbero gli argomenti passati da async), in modo da sarebbe il seguente:

function urlToS3(fileType, url2fetch, cb) { 
    ... 
} 
+0

Grazie, ha funzionato perfettamente. Bel, codice SECCO. Restituire diverse funzioni come suggerito da @nirk avrebbe comportato il tipo di duplicazione del codice che speravo di evitare. Grazie! – CleanTheRuck

+0

Perché funziona? – Startec

+0

@Startec vedere [questa documentazione] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Partial_Functions) – robertklep

Problemi correlati