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);