asynchronous。在async.series里面

我在async.waterfall里面使用async.waterfallasync.whilst里面这样(它只会崩溃一次,但是应该继续):

 function(callback){ async.whilst( function() { console.log("Number of things left: " + classes.length); return classes.length > 0; }, function(innerCallback){ //Define some variables. async.waterfall([ function (next) { MyTable.find({ Data: theData},{ DataThis:1, Stuff:1, _id:0 },next).limit(1); }, function (results, next) { if(results.length > 0 && results[0].theData=== parseInt(theInfo)){ //Update my database } else{ next(); } } ], setTimeout(function() { //Splice the data. Ie mydata.splice(i-1,1); innerCallback(); }, 0)); //closing async.waterfall. }, function(err){ // The final function of whilst callback(err); }) // Whilst finished } 

但是我得到一个错误:

 serverClasses2-3 TypeError: undefined is not a function serverClasses2-3 at /home/node_modules/async/lib/async.js:52:16 serverClasses2-3 at /home/node_modules/async/lib/async.js:1204:30 serverClasses2-3 at /home/routes/indexClasses2.js:267:11 serverClasses2-3 at Query.callback (/home/node_modules/mongoose/lib/query.js:2021:7) serverClasses2-3 at /home/node_modules/mongoose/node_modules/kareem/index.js:177:19 serverClasses2-3 at /home/node_modules/mongoose/node_modules/kareem/index.js:109:16 serverClasses2-3 at process._tickDomainCallback (node.js:381:11) 

有没有人遇到同样的错误?

您将setTimeout(…, 0)作为callbackasync.waterfall传递给async.waterfall 。 它不应该是undefined ,而是一个计时器对象,但它仍然是不可调用的,会抛出这样的错误。

相反,直接传递callback:

 async.waterfall([…], innerCallback) 

或者如果你需要做更多的事情,可以在超时周围使用函数expression式。