error handling与嵌套callbackasynchronous瀑布

我在async.waterfall( [] , function() )使用async.parallel。 代码如下:

 async.waterfall( [ function first(callback) { //some processing callback(); }, function second(result, callback) { //Here i query the db model.findAll() .then(function(success) { async.parallel( [array_of_functions], function done(err, result) { if (err) { callback(err); } } ) }) .catch(function(err) { callback(err); }) } ], function done(err, result) { if (err) { throw new Error(err); } } ) 

有时我在控制台上得到一个错误:

callback已经被调用

该错误消息告诉callback被调用多次。 我认为在async.parallel().catch()内的callback(err)同时被调用。 这基本上意味着,如果INSIDE .catch()发生错误.then()它会被捕获到.catch() 。 这是如何工作的? 其次,如果我想在嵌套callback中传播错误到async.waterfall() final done()函数,我该怎么做。