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

理由は単純明快です。1 つは、コールバックを "cb" に設定したことです。一貫性が非常に役立ちます。cb は何も返しませんが、見やすい行になります。コールバックを使用するたびに、return を確実に行いたいと思います。そうしないと、本当に厄介なエラーと "return cb(err);" が発生するからです。短く、読みやすく、一貫性があり、インデントのレベルをなくし、最も重要なことは探しやすいことです。

そして、これまたは他の同様の構造の習慣を身につけることができれば、コードを見て、先頭のリターンなしで迷子になった "cb(err)" がある場所を確認することが第 2 の性質になります。

そして、ところで、

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 に答える