Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当更干净的语法可用时,为什么要使用javascript回调?_Javascript_Node.js_Syntax_Callback_Code Readability - Fatal编程技术网

当更干净的语法可用时,为什么要使用javascript回调?

当更干净的语法可用时,为什么要使用javascript回调?,javascript,node.js,syntax,callback,code-readability,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, tod

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

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('/');
};
这两个代码都将保存新的todo和重定向


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

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


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

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


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

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


这取决于您的用例,如果您不想向用户显示错误,请选择2,否则选择1。当您只想记录事件、发送电子邮件或做一些用户和/或您甚至不在乎失败的事情时,2特别有用。大多数情况下,您需要选择1,因为您需要向最终用户显示某种错误,而不是默默地忽略错误。对于第一个错误,您有机会在查询完成后处理错误。对于第二种情况,您会自动假定不会发生任何不好的情况,并且您的查询将始终成功,并且用户将始终被重定向到之后的某个位置


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

我不知道node.js,但我认为回调是异步编程的典型特征。可能会有区别,但这取决于Todo的具体实现,至少不是,核心节点同步编程几乎是节点的全部要点。哇,谢谢你回答这么快的家伙@昆汀没错,托多是猫鼬的模特。运行这两个代码时有区别吗?我一直在读关于阻塞/非阻塞的书。是吗?我不知道node.js,但我认为回调是异步编程的典型特征。可能会有区别,但这取决于Todo的具体实现,而Todo不是核心节点。同步编程几乎是node的全部。哇,谢谢回答这么快的家伙@昆汀没错,托多是猫鼬的模特。运行这两个代码时有区别吗?我一直在读关于阻塞/非阻塞的书。是吗?如果在节点应用程序上看到任何UI,我都会感到惊讶。在这里锁定es线程可能更有说服力。是的,一开始还不清楚问题是否涉及Node.js。如果在节点应用程序上看到任何UI,我会感到惊讶。在这里锁定es线程可能更具说服力。是的,最初不清楚问题是否涉及Node.js。