1

我正在尝试学习使用 Node.js。到目前为止,一切都很好。但是,作为 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('/');
};

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

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

4

2 回答 2

3

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

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

于 2013-05-14T13:39:04.600 回答
1

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

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

于 2013-05-15T06:26:10.383 回答