我正在努力学习使用Node。到现在为止还挺好。但是,对JavasSript来说还是一个新手,当一个更清晰,更可读(至少对我来说)的语法可用时,我并没有真正理解使用回调。
这是一个让我的观点更加清晰的示例代码:
回调:
exports.create = function(req, res){
new Todo({
content : req.body.content,
updated_at : Date.now()
}).save(function(err, todo, count){
res.redirect('/');
});
};
没有回调:
exports.create = function(req, res){
newtodo = new Todo({
content : req.body.content,
updated_at : Date.now()
});
newtodo.save();
res.redirect('/');
};
这两个代码都会保存新的待办事项和重定向。
我的偏好是第二个,我觉得更容易阅读,但也许有一个区别我不明白。有区别吗?
答案 0 :(得分:3)
简短的回答是:为了避免在需要时间的操作完成执行时锁定用户界面。
在第二个示例中,如果save函数进行ajax调用,则必须进行同步ajax调用。
答案 1 :(得分:1)
对于第一个,您有机会在查询完成后处理错误。对于第二个,您自动假设不会发生任何错误,并且您的查询将始终成功,并且用户将始终被重定向到之后的某个位置。
这取决于您的使用案例,如果您不想向用户显示错误,请使用(2),否则请使用(1)。 (2)当你只想记录一个事件,发送电子邮件或做一些用户(和/或你)甚至不关心它的东西时,它会特别有用。大多数情况下,您需要选择(1),因为您需要向最终用户显示某种错误,而不是默默地忽略错误