Javascript 提前返回和回调:返回回调?

Javascript 提前返回和回调:返回回调?,javascript,node.js,Javascript,Node.js,对我的代码有分歧的时刻。在进行提前退货时,首选哪一种 if (err) callback(err); else { ... } 或 或 但是,我不喜欢返回回调,因为它是一个同步函数。你喜欢哪一种?为什么?是否有技术上的原因可以选择哪一种 if (err) callback(err); else { ... } 理想情况下,我可以做一些事情,比如if(err)callback(err),return但这是不可能的。我建议: if (err) { setTimeout(functi

对我的代码有分歧的时刻。在进行提前退货时,首选哪一种

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

但是,我不喜欢返回
回调
,因为它是一个同步函数。你喜欢哪一种?为什么?是否有技术上的原因可以选择哪一种

if (err) callback(err);
else {
  ...
}
理想情况下,我可以做一些事情,比如
if(err)callback(err),return但这是不可能的。

我建议:

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

这样回调就可以像其他线程一样有效地工作,而不会干扰主UI线程。

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

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

  ...
  return cb(err, data);
}
原因很简单。首先,我们已经为回调选择了“cb”——一致性非常有用。虽然cb没有返回任何东西,但它使我们可以轻松地查看这条线路。每次使用回调时,我们都希望确保返回,因为如果我们不这样做,它会导致非常恼人的错误,“return cb(err);”简短、易读、一致,消除了一定程度的缩进,最重要的是易于查找

而且,如果你能养成这种或任何其他类似构造的习惯,那么看看你的代码,看看哪里有不带前导返回的“cb(err)”就成了你的第二天性

顺便说一句

process.nextTick(function () { return cb(err); });
它的效率比

setTimeout(function () { return cb(err); }, 0);
请记住,有时您需要使用nextTick回调来展开堆栈

是的,我们总是做一个

return cb(err);

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

别担心,选择一个并坚持下去。虽然如果
callback
没有返回任何内容,那么最后一个就没有意义了。如果(err)返回callback(err);我的大多数函数已经在回调中,所以这是毫无意义的。但最重要的是,它很丑陋。
return cb(err);