错误示例:
app.get('do',function(req,res,next){ getUserId(function(err,userId){ if(err){ res.end(err);//错误位置 } getHeadPicByUserId(userId,function(){ }); }); }); var getHeadPicByUserId=function(userId,callback){ if(typeof userId!=='number'){ callback('用户名非法');//错误位置 } var users=[];//用户信息 if(users[userId]===undefined){ callback('用户不存在');//错误位置 } setTimeout(function(){ callback(null,users[userId]); },1000); }
代码中包含容易忽略的错误,错误位置已标出。
我们(例如我)很容易疏忽的就是:
1、调用callback函数作为结果返回,但忘记用callback执行完成后依然会执行后续的代码,以上代码callback没有返回,后面的代码在callback运行完后,依然会继续执行,不是我们想要的,请养成这样使用习惯:
return callback('用户名非法');
2、调用res.end()也是同理,我们在调用res.end的时候是对该response的结束,但并不是对代码的结束,请养成习惯:
return res.end(err);
结论:请记得对callback,res.end类似的代码正确理解,记得做善后:)