2014-02-23 10 views
6

Ich habe eine Reihe lang andauernder Datenbankabfragen, die ich ausführen muss, bevor ich eine Seite im Knoten rende. Jede dieser Abfragen benötigt einige ihrer eigenen Variablen. Gibt es eine einfache Möglichkeit, Variablen an das Dienstprogramm async.parallel() in Nodejs zu übergeben?Nodejs: Übergeben von funktionsspezifischen Variablen an Async.parallel()

async.parallel([ 
    queryX(callback, A1, A2, A3), 
    queryX(callback, B1, B2, B3), 
    queryY(callback, C1, C2, C3), 
    queryY(callback, D1, D2, D3), 
    queryZ(callback, E1, E2, E3), 
    queryZ(callback, F1, F2, F3), 
    ], 
    function(err, results) { /*Do Render Stuff with Results*/} 
); 
+0

Nein, 'async' haben keine Helfer dafür. Sie könnten '.bind()' oder ähnliche partielle Anwendungsmethoden versuchen, aber Ihr Callback ist an erster Stelle merkwürdig und kann die Verwendung dieser Methoden erschweren. – Bergi

Antwort

0

Gibt es eine einfache Möglichkeit, Variablen in die async.parallel() Dienstprogramm in NodeJS passieren?

Nicht in async selbst, könnte man jedoch eine kleine Hilfsfunktion für diese schreiben:

function passWithCallbackFirst(fn) { 
    var args = [].slice.call(arguments, 1); 
    return function(cb) { 
     args.unshift(cb); 
     return fn.apply(this, args); 
    }; 
} 

async.parallel([ 
    passWithCallbackFirst(queryX, A1, A2, A3), 
    passWithCallbackFirst(queryX, B1, B2, B3), 
    passWithCallbackFirst(queryY, C1, C2, C3), 
    passWithCallbackFirst(queryY, D1, D2, D3), 
    passWithCallbackFirst(queryZ, E1, E2, E3), 
    passWithCallbackFirst(queryZ, F1, F2, F3), 
], function(err, results) { 
    /*Do Render Stuff with Results*/ 
}); 
5

Sie sollten den Rückruf als letztes Argument NodeJS Konvention respektieren, wenn Sie Funktionen schreiben. Auf diese Weise könnten Sie Function.bind verwenden, um stattdessen Ihre Funktionen aufzurufen.

var queryx = function(A,B,C,callback){ .... ; callback(err,result) }; 

async.parallel([queryx.bind(null,A1,B2,A3),...,],callback); 

bind gibt eine partielle Anwendung:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

Verwandte Themen