我正在尝试执行一系列函数,每个函数都将回调传递给下一个.现在它看起来像这样(原谅任何小错误,我在发帖时重写它!):
function func1(callback) { callback(null,"stuff"); } function func2(input,callback) { callback(null,"foo" + input); } async.waterfall([func1,func2],function(err,result) { sys.puts(result); });
我的第一个问题是,我不确定如何优雅地启动此功能,因为它无法接受输入.我最终将把它包装在一个本地函数中,但它仍然让我有点不安.
其次,虽然这有效,但我不知道“错误”这个论点是如何发挥作用的.如果我尝试将其插入到参数列表中,它会以各种方式中断.我希望能够单独捕获任何函数中的错误 – 或者这是否需要,因为我在传递的最后一个回调上有错误?
解决方法
瀑布通常与匿名函数一起使用,因此参数来自外部范围.
错误如何工作很简单,当你提供任何评估为true的东西时,回调函数的第一个参数瀑布将停止并调用主回调.
function doStuff(foo,bla) { // more setup here async.waterfall([ function(callback){ try { // something that might explode callback(null,foo,bla); } catch (e) { callback(e); } },function(arg1,arg2,callback){ callback(null,'three'); },'done'); } ],function (err,status) { // if the above try/catche catches something,we will end up here // otherwise we will receive 'done' as the value of status // after the third function has finished }); }