在javascript中无法等待吗?

在javascript中无法等待吗?,javascript,events,Javascript,Events,我有一个包含许多html表单的页面,我需要浏览所有表单,提交它们并等待响应,然后获取数据 自然的做法是编写如下循环: for (i = 0; i < win.document.forms.length; i++) { // Submit form i and wait for the response } for(i=0;i

我有一个包含许多html表单的页面,我需要浏览所有表单,提交它们并等待响应,然后获取数据

自然的做法是编写如下循环:

for (i = 0; i < win.document.forms.length; i++)
{
    // Submit form i and wait for the response
}
for(i=0;i
但随后问题就出现了:如何在循环中等待响应?您可以检查数据是否可用,如果不可用?你如何在循环中消磨时间?js中没有睡眠功能,对吗

在循环中运行并始终检查数据将占用所有系统资源。你也不能那样做。我目前的看法是,您需要退出循环并终止,但要安排包含函数稍后执行。当函数稍后运行时,您必须在中断点重新进入循环,并再次检查可用数据


至少可以说这很尴尬。我错过什么了吗?有更好的解决方案吗?

您可以将ajax异步调用与回调一起使用,这样就不会阻塞线程

$("form").each(function (index, element) {
    var form = $(element);

    $.ajax({
        url: form.attr('action'),
        type: 'POST',
        data: form.serialize(),
        success: function (result) {
            // ... Process the result ...
        }
    });
});

若您想使用for循环,那个么您还需要创建外部函数,因为在该循环中定义的变量不会在词汇范围内,所以您可以多次提交相同的表单

当然可以等。我们一直在JS中这样做,因为很多东西都是异步的。但等待是非阻塞的(与PHP不同)。例如,您可以使用承诺,或者带有回调的ajax调用,等等。您应该研究Javascript中的“异步”操作和“回调函数”。这是一个完整的逻辑,但对很多东西都是必要的。@Jeremythill我知道js的异步本质,这就是问题所在。您能告诉我如何使用ajax或promises解决这个问题吗?请注意,当数据可用时,不会触发任何事件。@Kaddath我痛苦地意识到异步的本质。你如何解决上述问题?你是说没有比我现在的解决方案更好的了吗?这是一个相当普遍的问题,不是一个可以复制的具体问题,所以它不属于这里。我相信你需要使用
Promise.all([…])
或其他东西,这将等待几个承诺结束。你是说JQuery中有现成的解决方案?它如何处理窗体的事件处理程序?假设f.ex。表单是否有onsubmit处理程序?在像override中一样提交时,您需要重写该默认功能?我不能那样做,因为那样就不行了。文档中的所有js代码必须正常运行。