循环中的jquery回调不起作用
我不是jquery专家,但我认为下面的方法可以奏效循环中的jquery回调不起作用,jquery,callback,Jquery,Callback,我不是jquery专家,但我认为下面的方法可以奏效 var next = true; while(count != data.length) { if(next == true) { calcRoute(directionsService, data, count, function(){next = true;}); count++; next=false;
var next = true;
while(count != data.length)
{
if(next == true)
{
calcRoute(directionsService, data, count, function(){next = true;});
count++;
next=false;
}
}
function calcRoute(service, data, count, callback)
{
.....
callback();
}
因此,我需要等到calcRoute完成后再调用它,我认为这样做会起作用,但我最终进入了一个无限循环。如果忽略不必要的回调(如果calcRoute本身是异步的,您只需要回调),无限循环是由条件中的next=false引起的,我们将非常感谢任何建议。正在发生的是:
while(count != data.length)
{
calcRoute(directionsService, data, count);
count++;
}
function calcRoute(service, data, count)
{
.....
}
这将消除由布尔检查引起的无限循环,并在递增计数和循环之前完成每个条目的计算
对以下评论作出回应的新增内容
即使函数calcRoute本身调用异步函数,也不会使calcRoute本身异步。calcRoute可以,也将在其中的异步函数返回响应之前完成并退出——这仍然意味着它将完成并返回其标志,然后其余代码将以线性方式执行。next=true函数仍将在线性代码中设置的next=false之前执行,并且您仍将以无限循环结束
要解决这个问题,您需要让异步函数触发回调而不是calcRoute,或者切换到使用承诺体系结构而不是显式回调函数,这取决于您正在使用的异步函数的可用选项。检查
回调()中的任何循环引用
到calcRoute()
您使用的是延期付款吗?calcRoute()
函数中的任何内容都是异步的吗?从你所展示的代码来看,回调并不存在,因此回调是没有意义的。在回调中尝试promise方法。上面的while循环在ajax响应中,所有过程都是从该响应中执行的,calcRoute与此非常相似。谢谢你的回答,但calcRoute是异步的,它调用google direction api,您可以在问题注释中看到我的函数的类似版本,由于Google api的限制,我必须确保一个接一个地调用此函数,以减少达到限制的可能性。按您的方式执行会立即达到限制calcRoute函数本身不是异步的,但是--如果它在函数中调用异步的东西(这里没有发布,所以我们看不到),那么需要触发回调事件的是被调用的异步函数,而不是calcRoute本身,因为calcRoute可以在它内部的异步函数完成之前退出。啊,我明白了,谢谢,我会看一看,这是否意味着我可以通过多个函数传递回调函数?如果你调用的函数支持它,你可以。