我的代码有一个分裂的时刻。在做早期退货时,这是首选的吗?
if (err) callback(err);
else {
...
}
或
if (err) {
callback(err)
return
}
...
或
if (err) return callback(err);
...
然而,由于它是一个同步函数,我不习惯返回callback
。你喜欢哪个?为什么?有哪些技术原因可供选择?
理想情况下,我可以做if (err) callback(err), return;
之类的事情,但那是不可能的。
答案 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线程。