2016-04-25 6 views
0
async.waterfall([1,2,3,4].map(function (arrayItem) { 
     return function (lastItemResult, nextCallback) { 
      // same execution for each item in the array 
      var itemResult = (arrayItem+lastItemResult); 
      // results carried along from each to the next 
      nextCallback(null, itemResult); 
     }}), function (err, result) { 
     // final callback 
    }); 

so ich bin neu in async und ein einfaches Beispiel versuchen, aber diesen Fehler, was ist falsch mit dieser Methode Typeerror: nextCallback ist keine FunktionAsynchron-Wasserfall Typeerror bekommen, nextcallback ist keine Funktion

was stimmt der Code nicht?

Antwort

0

Gemäß der documentation sollte die Signatur einer ersten Funktion function (callback) und nicht function (arg1, callback) sein.

Sie können Ihre Funktion auf diese Weise patch.

return function (lastItemResult, nextCallback) { 
    if (!nextCallback) { 
     nextCallback = lastItemResult; 
     lastItemResult = 0; 
    } 

    // same execution for each item in the array 
    var itemResult = (arrayItem+lastItemResult); 
    // results carried along from each to the next 
    nextCallback(null, itemResult); 
}; 
0

Wenn Sie einen Blick auf den async docs nehmen, werden Sie das folgende Beispiel für async.waterfall bemerken:

async.waterfall([ 
    function(callback) { 
     callback(null, 'one', 'two'); 
    }, 
    function(arg1, arg2, callback) { 
     // arg1 now equals 'one' and arg2 now equals 'two' 
     callback(null, 'three'); 
    }, 
    function(arg1, callback) { 
     // arg1 now equals 'three' 
     callback(null, 'done'); 
    } 
], function (err, result) { 
    // result now equals 'done' 
}); 

dieses Beispiel vergleichen mit Ihrem Code: das Problem ist, dass die erste Funktion, die Ihr map Rückruf Erzeugungs ist, hat die falsche Unterschrift, da es nur ein Argument braucht. Wenn die nextCallback(null, itemResult) aufgerufen wird, ist nextCallback nicht definiert.