早期退货和回调:返回回调?

时间:2012-10-02 06:53:49

标签: javascript node.js

我的代码有一个分裂的时刻。在做早期退货时,这是首选的吗?

if (err) callback(err);
else {
  ...
}

if (err) {
   callback(err)
   return
}
...

if (err) return callback(err);
...

然而,由于它是一个同步函数,我不习惯返回callback。你喜欢哪个?为什么?有哪些技术原因可供选择?

理想情况下,我可以做if (err) callback(err), return;之类的事情,但那是不可能的。

2 个答案:

答案 0 :(得分:3)

我和我的团队确定了你的最后选择:

function (x, y, z, cb) {
  var err, data;
  ...
  if (err) return cb(err);

  ...
  return cb(err, data);
}

原因很简单。一,我们为回调确定了“cb” - 一致性非常有用。虽然cb没有返回任何东西,但它可以让你轻松看到它。每次我们使用回调,我们要确保我们做回报,因为如果我们不这样做会导致真正恼人的错误并“返回cb(错误);”简短,易读,一致,删除了一定程度的缩进,最重要的是易于查找。

而且,如果你可以养成这个或任何其他类似构造的习惯,那么看看你的代码并看看你有没有领先回归的流浪“cb(错误)”的第二天性。

而且,BTW,

process.nextTick(function () { return cb(err); });

更有效
setTimeout(function () { return cb(err); }, 0);

请记住,有时你需要nextTick回调来展开你的筹码。

是的,我们总是做一个

return cb(err);

即使我们不需要。一致性很好。

答案 1 :(得分:0)

我建议:

if (err) {
   setTimeout(function() {
      callback(err);
   }, 0);
   return;
}

以便回调有效就像另一个线程不会干扰主UI线程。