async.auto逻辑控制时,出现callback is not a function
发布于 6 年前 作者 xia123zheng 4357 次浏览 来自 问答

用nodejs实现逻辑复杂的功能时,为了避免多层回调嵌套的坑,选用了async.auto方法,我直接拿了网上的一段代码进行调试,在调试的过程中,出现了一个问题:callback is not a function,我自己定义了callback函数,也不行。听说async.auto很强大,所以很想用这个方法重构我的代码。希望各位高手能够帮我找到出错的原因,谢谢!测试代码如下: var async = require(‘async’);

var funclist = { func1: function (callback, results) { console.log(‘func1执行,传入值{name:123}’) callback(null, {name:‘123’}); }, func2: function (callback, results) { console.log(‘func2执行,传入值 { “puncha”: “during” }’) //console.log(results); callback(null, { “puncha”: “during” });

},
func3: ["func2", function (callback, results) {
    console.log('func3在func2执行后执行,传入值 3')
   // console.log(results);
    callback(null, 3);
}],
func4: ["func3", function (callback, results) {
    console.log('func4在func3执行后执行,总体执行结果为:')
    console.log(results);
    callback(null,1);
}]

}; //function callback(str){console.log(str);} async.auto(funclist);

![R0E1U(UBD@~9ZSRUHOV]2PQ.jpg](//static.cnodejs.org/FnSdE_c9YIxvd8mKmrpSkjYlhzbX)

2 回复

把 func3, func4, 回调的参数对调一下, console.time(‘auto’) async.auto({ getData: function(cb){ setTimeout(function(){ console.log(‘auto step 1, get data’) cb(null, 1) }, 3000) }, makeDir: function(cb){ setTimeout(function(){ console.log(‘auto step 2, make dir’) cb(null, 2) }, 1000) }, writeFile: [‘getData’, ‘makeDir’, function(rs, cb){ //var arg = arguments setTimeout(function(){ console.log(‘auto step 3, write file’) //console.log(arg) cb(null, 3) }, 200) }], sendEmail: [‘writeFile’, function(rs, cb){ setTimeout(function(){ console.log(‘auto step 4, send email’, rs) cb(null, 4) }, 3000) }] }, function(err, rs){ console.log(err, rs, ‘auto’) console.timeEnd(‘auto’) }) console.timeEnd(‘auto’)

没听太明白额,你贴的代码里的cb(null, 1),cb(null, 2),cb(null, 3),cb(null, 4),null和数字的意思是什么啊,能解释下么,感谢,感谢

回到顶部