多くのjson呼び出しを実行し、結果にコールバックを適用する必要があります。呼び出しの回数は実行時まで不明です。したがって、$.when.apply
を使用して、約束の配列をwhen
に渡します。
jsonPromises = []
newContentActions = []
for model in models
jsonPromises.push contentCreator.create(model)
action = new ActionHandler model
newContentActions.push action
$.when.apply($, jsonPromises)
.then (args...) =>
_.each args, (result, idx) =>
return unless result[1] is 'success'
action = newContentActions[idx]
action result[0]
これは多かれ少なかれ動作します。 1つ以上の約束がある場合、$.when
のハンドブックは、配列の配列を取得します(例えば、Chrome開発コンソールに表示される[[Object, "success", Object], [Object, "success", Object]]
)。 _.each
は、それを正しくresult, idx
に解凍することができます。
しかし、約束が1つしかない場合は、then
ハンドラで1つの配列しか取得できません。それは_.each
を混乱させます。 each
は、単一の配列と結果を3つの関数呼び出しに展開します。私のアプリは失敗します。
これを回避するために、私は約束の数をチェックします。一つだけがある場合、私は$.when
を使用しません:それはこの結果を達成するための唯一の方法
if jsonPromises.length is 1
jsonPromises[0].done (model) =>
action = newContentActions[0]
action model
else
$.when.apply($, jsonPromises)
.then (args...) =>
_.each args, (result, idx) =>
return unless result[1] is 'success'
action = newContentActions[idx]
action result[0]
ですか?小切手 jsonPromises.length is 1
を削除する方法はありますか?