2014-01-22 5 views
11

Ich brauche den Code zu tun wie folgt vor:node.js async Argumente der Serie Funktion

function taskFirst(k, v) { 
    console.log(k, v); 
} 

function taskSecond(k, v) { 
    console.log(k, v); 
} 

function run() { 
    var g1 = "Something"; 
    var g2 = "Something"; 
    var g3 = "Something"; 
    var g4 = "Something"; 

    async.series(
     [ 
      taskFirst(g1, g2), 
      taskSecond(g3, g4) 
     ], 
     function(error, result){ 

     } 
    ); 
} 

Was ist der richtige Weg benutzerdefinierte Variablen zu übergeben und async.js Callback-Funktion?

Antwort

18

folgt Sie so etwas tun könnte:

function taskFirst(k, v, callback) { 
    console.log(k, v); 

    // Do some async operation 
    if (error) { 
     callback(error); 
    } else { 
     callback(null, result); 
    } 
} 

function taskSecond(k, v, callback) { 
    console.log(k, v); 

    // Do some async operation 
    if (error) { 
     callback(error); 
    } else { 
     callback(null, result); 
    } 
} 

function run() { 
    var g1 = "Something"; 
    var g2 = "Something"; 
    var g3 = "Something"; 
    var g4 = "Something"; 

     async.series(
      [ 
       // Here we need to call next so that async can execute the next function. 
       // if an error (first parameter is not null) is passed to next, it will directly go to the final callback 
       function (next) { 
        taskFirst(g1, g2, next); 
       }, 
       // runs this only if taskFirst finished without an error 
       function (next) { 
        taskSecond(g3, g4, next);  
       } 
      ], 
      function(error, result){ 

      } 
     ); 
} 
2

Es kann als

function taskFirst(k, v) { 
    console.log(k, v); 
} 

function taskSecond(k, v) { 
    console.log(k, v); 
} 

async.series([ 
    function(callback) { 
     callback(null, taskFirst(g1, g2)); 
    }, 
    function(callback) { 
     callback(null, taskFirst(g3, g4)); 
    } 
],function(error, result){ 

}); 
+0

Dies wird nicht funktionieren. Der Rückruf wird sofort ausgeführt, so dass async zur nächsten Funktion weitergeht. Sie sollten den Callback an Ihre Funktion übergeben und alles ausführen, sobald Ihre asynchrone Arbeit abgeschlossen ist. –

+0

Ja - diese Antwort setzt voraus, dass der Code in taskFirst blockiert. – HexCoder

2

Diese Antwort auf die async Github Problem für mich perfekt gearbeitet. https://github.com/caolan/async/issues/241#issuecomment-14013467

für Sie wäre es so etwas wie:

var taskFirst = function (k, v) { 
    return function(callback){ 
     console.log(k, v); 
     callback(); 
    } 
}; 
+0

Danke, mir fehlte, dass ich die Funktion wickeln musste und es zurückgeben :) – nyarasha

+0

Ich musste ein dynamisches Array von Funktionen mit Parametern erstellen, die ich async.series geben musste und Ihre Antwort half mir in die richtige Richtung, danke –

1

besseren Weg.

const a1 = (a, callback) => { 
    console.log(a, 'a1') 
    callback() 
} 
const a2 = (a, callback) => { 
    console.log(a, 'a2') 
    callback() 
} 

const run =() => { 
    async.series([ 
     a1.bind(null, 'asd'), 
     a2.bind(null, 'asd2') 
    ],() => { 
     console.log('finish') 
    }) 
} 
run()