2015-03-11 6 views
10

Ich studiere das Modul node.js async, aber ich habe einige Probleme mit der Funktion async.retry.Ermitteln von Erfolg/Misserfolg mit der Funktion node.js async.retry

Entsprechend seiner github docs, wird die Funktion weiterhin versuchen, die Aufgabe zu versuchen, bis es gelingt oder die Chancen aufgebraucht sind. Aber wie kann meine Aufgabe Erfolg oder Misserfolg erzählen?

habe ich versucht, den Code unten:

var async = require('async'); 

var opts = { 
    count : -3 
}; 

async.retry(5, function (cb, results) { 
    ++this.count; 
    console.log(this.count, results); 
    if (this.count > 0) cb(null, this.count); 
    else cb(); 
}.bind(opts), function (err, results) { 
    console.log(err, results); 
}); 

ich es erwarten, bis count === 1 laufen, aber er druckt immer:

-2 undefined 
undefined undefined 

Wie kann ich die Funktion richtig nutzen?

+0

Sie danken die Verwendung von 'bind' in der Asynchron-Aufgabe zeigt. Ich habe nur versucht herauszufinden, wie man Argumente übergibt. – Ali

Antwort

5

Sie möchten, dass Ihre else-Verzweigung fehlschlägt. Dazu müssen Sie etwas an den Fehlerparameter übergeben. Momentan passiert man einfach undefined, was Erfolg signalisiert - und genau das bekommt man zurück.

async.retry(5, function (cb, results) { 
    ++this.count; 
    console.log(this.count, results); 
    if (this.count > 0) cb(null, this.count); 
    else cb(new Error("count too low")); 
}.bind(opts), function (err, results) { 
    console.log(err, results); 
}); 
+0

Was mir völlig entgeht, ist, warum in der Dokumentation nicht der Callback der erste Parameter der Funktion sein sollte, die Sie erneut versuchen. – Ali

+1

@Ali: Äh, eigentlich ist es [genau dort] (https://github.com/caolan/async#retry): "*' Aufgabe (Rückruf, Ergebnisse) '- Eine Funktion, die zwei Argumente erhält: (1) a Callback ... * " – Bergi

+0

Ja, ich habe gerade gelesen, was eine _task_ ist. Mein Fehler. – Ali