我試圖用jQuery來編寫一些JavaScript代碼,它依次執行一些異步事件(在一個循環中);只有在之前的異步事件完成後才迭代。jQuery按順序執行異步事件
的基本思路是:
for (var i = 0; i < someLength; i++) {
// 1. dynamically add a <form> and <input>s to the DOM
// 2. submit the form to a target <iframe>
// 3. wait for an async callback indicating the form has been submitted
}
我已經工作了#1和#2的代碼,我可以附加一個load
事件偵聽器知道當表單提交已完成:
$('.iframe').on('load', function() { ...
});
for (var i = 0; i < someLength; i++) {
// 1. dynamically add a <form> and <input>s in the DOM
// 2. submit the form to a target <iframe>
// 3. wait for an async callback indicating the form has been submitted
}
問題是我不知道如何將ready
回調與循環邏輯聯繫起來。我試圖研究延期/承諾,但並沒有真正看到如何在這裏正確應用這些概念。
如果答案是使用承諾,那麼我也希望看到如何合併一些代碼以在循環進行時顯示「加載」微調器,然後在我們退出循環時刪除微調器。
謝謝!
謝謝@Alex。所以在這個解決方案中,我基本上排隊了所有提交,然後等待'load'回調觸發'someLength'多少次?如果我只想在下一次提交時如果前一次成功(假設我有辦法知道它是成功還是失敗),該怎麼辦? –
在'.load'處理程序中,您可以檢查當前狀態並決定下一步該做什麼。 –
沒錯,但我認爲在你的代碼中,所有的提交請求都會在'for'循環中被啓動/排隊,並且當一個請求結束時,'load'處理程序將被回調。有了這個方案,如果前一個失敗,你不能阻止下一個提交的執行,或者我錯過了什麼? –