0

私はおそらく不可能なものを探していますが、とにかく試してみましょう。完了時にコールバックを実行する条件付きのリモート操作を実行している次の疑似コードを検討してください。ただし、リモート操作が不要な場合でも、コールバック内のコードを実行する必要があります。

if (needsToSave)
{
  performRemoteOperation(operationParameters, function() {
    doSomeCleanup();
    doSomeMoreCleanup();
    setSomeStatus();
  });
}
else
{
    doSomeCleanup();
    doSomeMoreCleanup();
    setSomeStatus();
}

このコードは特に見苦しく、扱いにくいと思います。関連する無条件ブロック内のコールバック ブロックに加えられた変更を簡単に省略できます。いくつかの名前付き関数でコードをラップする明らかな解決策がありますが、それはもはや匿名のインライン コードではありません。:-)

私が考えることができる最善の方法は、条件付き呼び出し元でコード全体をラップすることです。

function conditionalCall(condition, action, callback)
{
  if (condition)
    action(callback)
  else
    callback()
}

次に、私のコードは次のように折りたたまれます。

conditionalCall(needsToSave,
  function(_callback) {
    performRemoteOperation(operationParameters, _callback)
  },
  function()
  {
    doSomeCleanup();
    doSomeMoreCleanup();
    setSomeStatus();
  }
);

...しかし、これがより読みやすく、管理しやすいかどうかは、私には絶対にわかりません。特に、多くのローカル/リモート/コールバック パラメーター/クロージャー変数が関係する場合、または別の呼び出しのコールバック内に 1 つのリモート呼び出しを「埋め込む」必要がある場合。このようなシナリオで使用できるより良い構文があることを願っています。

4

2 に答える 2