JavaScriptで遅延クラスを初めて使用し、フォームをループして1つずつ送信する関数を実装したいと考えています。jQueryを使用した遅延非同期タスク
これは、遅延クラスのように見えます。
私はthis answerに従ってみましたが、何らかの理由で私の実装が始まり、3秒待って完了します。すべてのフォームが完了してから完了するまで、3秒ごとに別のフォーム名を表示します。
私は間違っていますか? JSFIDDLE
function syncAll() {
var promises = [];
var forms = [
{'name':'form 1'},
{'name':'form 2'},
{'name':'form 3'},
{'name':'form 4'}];
$.each(forms, function (index, value) {
var def = new $.Deferred();
setTimeout(function() {
$("#output").html("Syncing: " + value.name);
def.resolve({ 'message': 'finito!' });
}, 3000);
promises.push(def);
});
return $.when.apply(undefined, promises).promise();
}
$.when(syncAll()).done(function(response){
$("#output").html(response.message);
});
/*
syncAll().done(function (response) {
$("#output").html(response.message);
}));
*/
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output">Start</div>
'$ .when'は、約束*をパラレル*に適用し、それらがすべて終了するのを待ちます。すべてのフォームが同時に提出されています。 * .then()でシーケンスを*連鎖したい –
あなたのコードをきれいにするのに便利です。 –
@GoneCoding - 同じ関数を呼び出すループの場合、シーケンスをどのようにチェーンするのですか? 'submitForm'と言ってください。 – capdragon