2

对我的代码有一个分裂的时刻。提早退货时,首选哪个?

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

或者

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

或者

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

但是,我不愿意返回callback,因为它是一个同步函数。你喜欢哪个?为什么?是否有技术原因决定哪个是首选?

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

4

2 回答 2

3

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

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

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

于 2012-10-03T01:30:02.747 回答
0

我会建议:

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

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

于 2012-10-02T06:56:01.040 回答