我试图用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'处理程序将被回调。有了这个方案,如果前一个失败,你不能阻止下一个提交的执行,或者我错过了什么? –