nodejs中关于回调函数的应用遇到callback is not a function的解决方法
最近在学习nodejs这个服务端开发平台的知识点。一边根据文档学习,一边在写几行测试代码实现有助于了解,在学到回调函数的时候却遇到了callback is not a function的问题。按理说我按照文档代码写的,应该不会出错的,下面是我一开始的时候的代码单纯为了看效果:function doSomething(args, callback) {somethingComplicat...
·
最近在学习nodejs这个服务端开发平台的知识点。一边根据文档学习,一边在写几行测试代码实现有助于了解,在学到回调函数的时候却遇到了callback is not a function的问题。按理说我按照文档代码写的,应该不会出错的,下面是我一开始的时候的代码单纯为了看效果:
function doSomething(args, callback) {
somethingComplicated(args);
process.nextTick(callback);
}
doSomething(function onEnd() {
compute();
});
function somethingComplicated(){
console.log("this is first function!");
}
function compute() {
console.log("this is second function,callback");
}
然后直接运行这个js文件,控制台输出的结果如下:
又图可以看到callback is not a function,也是就说这个回调函数出错了,按理说按照文档直接写的应该不会出错的才对的啊,痛苦的表情中…
后来再认真看文档,毕竟不懂还是要问文档嘛!
原来在回调函数中,第一个参数不是传给回调函数的,也就是说没有任何参数传给callback,所以callback当然 is not a funciotn 了。
针对上面的问题,以下有两种解决方法:
方法一:改写doSomething函数,把第一个入参函数变成回调函数,实际操作如下所示:
function doSomething(args, callback) {
somethingComplicated(args);
if (arguments.length==1 && 'function'==typeof args){
callback = args;
}
process.nextTick(callback);
}
doSomething(function onEnd() {
compute();
});
function somethingComplicated(){
console.log("this is first function!");
}
function compute() {
console.log("this is second function,callback");
}
方法二,把第一个不传递的参数设置为null,这样第二个参数函数既为回调函数了
function doSomething(args, callback) {
somethingComplicated(args);
process.nextTick(callback);
}
doSomething(null,function onEnd() {
compute();
});
function somethingComplicated(){
console.log("this is first function!");
}
function compute() {
console.log("this is second function,callback");
}
无论哪种方法,最后测试都成功了,运行结果如下所示:
更多推荐
所有评论(0)