为什么在更清晰的语法可用时使用javascript回调?

时间:2013-05-14 13:36:47

标签: javascript node.js syntax callback code-readability

我正在努力学习使用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('/');
};

这两个代码都会保存新的待办事项和重定向。

我的偏好是第二个,我觉得更容易阅读,但也许有一个区别我不明白。有区别吗?

2 个答案:

答案 0 :(得分:3)

简短的回答是:为了避免在需要时间的操作完成执行时锁定用户界面。

在第二个示例中,如果save函数进行ajax调用,则必须进行同步ajax调用。

答案 1 :(得分:1)

对于第一个,您有机会在查询完成后处理错误。对于第二个,您自动假设不会发生任何错误,并且您的查询将始终成功,并且用户将始终被重定向到之后的某个位置。

这取决于您的使用案例,如果您不想向用户显示错误,请使用(2),否则请使用(1)。 (2)当你只想记录一个事件,发送电子邮件或做一些用户(和/或你)甚至不关心它的东西时,它会特别有用。大多数情况下,您需要选择(1),因为您需要向最终用户显示某种错误,而不是默默地忽略错误