チェーン内の別個の操作を完了するコードがあります。一連の操作は、ループ内で実行されます。私が扱っているシステムの性質上、操作セットは同期して実行される必要があります(つまり、最初のセットが終了する前に次の操作セットは実行できません)。非同期実行は、リモートプロセッサを(私の制御ではなく)捨てて、コードが失敗する原因になります。今、私がこれを動作させるための唯一の方法は、アラートボックスを使用することです。これは本当に不自由でオプションではありません。私が試した:前のセットが完了した後でのみ、ループ内で一連の作業を実行します。
- $アヤックスを使用して、スリープ機能に(絶望で使用)
- 警告ボックスここ
$('input:checked').each(function(index){
//get the item's location id
var currentInput = $(this).val();
var copyUser = function(){$.get(urlCopyPrefix + currentInput + urlSuffix);}
var moveUser = function(){$.get(urlMovePrefix + moveLocation + urlSuffix);}
var cleanup = function(){
var newSibling = $('#module-' + moveLocation);
newSibling.before('<li>New Line</li>');
alert('done');
}
/* --> THIS IS THE CODE IN QUESTION <-- */
$.when(copyUser()).pipe(moveUser).then(cleanup);
});
私は頼む異なる。 'copyUser'と' moveUser'はDeferreds自身ではありません。いったん呼び出されると、彼らはDeferredを返します。 'when' /' then'が動作する唯一の方法は、あなたが関数を呼び出して、返されたDeferredを 'when' /' then'に渡すことです。 –
また、彼は絶対に 'pipe'メソッドを使用しなければなりません。あなたが 'then'関数を追加しているだけなら、彼らはお互いを待つことはありません。 OPは明確に 'cleanup'を実行する前に' moveUser'が復帰することを明確に望んでいます。それを達成する唯一の方法は 'pipe'です。 –
OK、 'pipe()'に戻りました。パイプ上のjQueryのドキュメントは価値がありません。 – jfriend00