提前返回和callback:返回callback?

对我的代码有一个分裂的时刻。 在做早期回报时,哪个是首选?

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

要么

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

要么

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

不过,由于它是一个同步函数,所以我不习惯返回callback 。 你喜欢哪个? 为什么? 是否有技术上的理由,哪一个是首选?

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

我的团队和我决定你的最后一个select:

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

原因很简单。 一,我们已经为我们的callback决定了“cb” – 一致性是非常有帮助的。 虽然cb没有返回任何东西,但它使得我们可以轻松查看。 每次我们使用callback,我们要确保我们做一个回报,因为如果我们不这样做会导致真正烦人的错误和“返回CB(犯错);” 是简短的,易于阅读,一致的,消除了一级缩进,最重要的是容易寻找。

而且,如果你可以养成这个或者其他类似构造的习惯,那么看看你的代码就会变成第二天性,看看你有没有领先的回报的stream氓“cb(err)”。

而且,BTW,

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

比…更有效率

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

请记住,有时您需要使用nextTick来解开您的堆栈。

是的,我们总是做一个

 return cb(err); 

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

我会build议:

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

这样的callback工作有效另一个线程不会干扰主UI线程。