2013-06-07 12 views
6

Nie mogę dla życia mnie znaleźć odpowiedź na to. Jak przekazać parametr do funkcji iteratora dla async.each przy użyciu modułu węzła async.js caolan? Chcę ponownie użyć iteratora, ale musi on zapisywać rzeczy z innym prefiksem na podstawie kontekstu. Co mam to:Jak przekazać argument do funkcji iteratora dla 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 
} 

Co chciałbym być w stanie zrobić, to:

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 
    } 
} 

znalazłem coś podobnego jedno pytanie coffeescript ale odpowiedź nie działa. Jestem otwarty na refaktoryzację na wypadek, gdy próbuję zrobić coś, co nie jest idiomatyczne, ale wydaje mi się to logiczne.

Odpowiedz

15

Można tworzyć częściową funkcję używając bind:

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

argument 'image' zostanie przekazana jako pierwszy argument do funkcji (reszta argumentów byłoby argumenty przekazywane przez async), więc będzie wyglądać tak:

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

Dzięki, działało idealnie. Ładny, suchy kod. Zwracanie różnych funkcji, jak sugerował @nirk, spowodowałoby rodzaj powielania kodu, którego miałem nadzieję uniknąć. Dzięki! – CleanTheRuck

+0

Dlaczego to działa? – Startec

+0

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

Powiązane problemy