2016-05-03 21 views
2

Ich fand dieses Beispiel in der docs. Ich verstehe, wie der Hauptrückruf (Funktion (Fehler, Ergebnisse) ...) funktioniert, aber was ist der Rückruf-Parameter, der in ein und zwei Funktionen übergeben wird? Woher kommen die und was machen sie?Wie funktioniert der Callback in async.parallel (woher kommt er?)

async.parallel({ 
    one: function(callback){ 
     setTimeout(function(){ 
      callback(null, 1); 
     }, 200); 
    }, 
    two: function(callback){ 
     setTimeout(function(){ 
      callback(null, 2); 
     }, 100); 
    } 
}, 
function(err, results) { 
    // results is now equals to: {one: 1, two: 2} 
}); 

Antwort

1

Es kommt nicht von irgendwo, es ist nur, wie die Bibliothek funktioniert, wird ein Rückruf auf die nächste Funktion zu übergeben Daten verwendet.

Dies ist die Funktion hier:

function _parallel(eachfn, tasks, callback) { 
    callback = callback || noop; 
    var results = isArrayLike(tasks) ? [] : {}; 

    eachfn(tasks, function (task, key, callback) { 
     task(rest(function (err, args) { 
      if (args.length <= 1) { 
       args = args[0]; 
      } 
      results[key] = args; 
      callback(err); 
     })); 
    }, function (err) { 
     callback(err, results); 
    }); 
} 

https://github.com/caolan/async/blob/master/dist/async.js#L3471

+0

Nun, es von irgendwo kommen wird. Es kommt aus der asynchronen Bibliothek. – jfriend00

3

Das callback Argument auf Ihre Funktionen von der Asynchron-Infrastruktur übergeben wird. Es zeigt auf eine Funktion innerhalb von async (obwohl das nicht etwas ist, das Sie wissen müssen). Die asynchrone Infrastruktur leitet sie an Sie weiter und fordert Sie auf, sie zur richtigen Zeit aufzurufen.

So kommunizieren Sie zurück zur async-Bibliothek, um ihr mitzuteilen, dass Ihre asynchrone Funktion ihre Arbeit beendet hat und ob sie erfolgreich oder mit einem Fehler beendet wurde. Wenn Ihre Funktion ihre Arbeit beendet hat, rufen Sie diese Funktion auf und benachrichtigen die asynchrone Bibliothek, dass dieser Schritt des Prozesses jetzt ausgeführt wird (entweder mit Fehler oder Erfolg).


FYI, wenn Sie mit Express Middleware in node.js vertraut sind, ist es sehr ähnlich dem next Argument, die Middleware übergeben wird. Wenn Ihre Middleware aufgerufen wird, ist eines der übergebenen Argumente der Rückruf next. Ihre Middleware erledigt ihre Arbeit (die async sein könnte) und wenn sie fertig ist, teilt sie der Express-Infrastruktur mit, dass sie das getan hat, indem sie den next() Callback aufruft, der an sie übergeben wurde.

Hier ist ein etwas ähnliches Beispiel aus Express:

app.use(function (req, res, next) { 
    doSomethingAsync(function() { 
     next(); 
    }) 
}); 
+0

ok der Callback zeigt dem Haupt-Callback an, dass die Arbeit erledigt ist. Aber was ist der Zweck, diese Callback-Argumente zu übergeben? like (null, und 1? was ist der Punkt von null? und ist 1 nur die erfolgreiche Antwort? – akantoword

+1

@jlei - Das erste Argument des Callback sagt async, ob es einen Fehler gab oder nicht. Sie übergeben 'null', um Nein anzuzeigen Wenn Sie einen truthigen Wert (in der Regel ein Fehlerobjekt) für dieses erste Argument übergeben, bedeutet dies eine Fehlerbedingung, und die asynchrone Bibliothek bricht den Rest der Verarbeitung ab und übergibt diesen Fehler an den Abschlussrückruf asynchrone Aufrufkonvention im Knoten. – jfriend00