提前返回和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线程。