强制Javascript函数调用等待上一个函数调用完成
我有一个简单的Javascript函数:强制Javascript函数调用等待上一个函数调用完成,javascript,jquery,Javascript,Jquery,我有一个简单的Javascript函数: makeRequest(); 它做了大量工作,并将大量内容放入DOM中 我打了几个这样的电话: makeRequest('food'); makeRequest('shopping'); 然而,他们两人的射击速度如此之快,以至于他们互相踩着对方的脚。最终,我需要它具有的功能 makeRequest('food'); wait.... makeRequest('shopping'); only if makeRequest('food') has fi
makeRequest();
它做了大量工作,并将大量内容放入DOM中
我打了几个这样的电话:
makeRequest('food');
makeRequest('shopping');
然而,他们两人的射击速度如此之快,以至于他们互相踩着对方的脚。最终,我需要它具有的功能
makeRequest('food');
wait....
makeRequest('shopping'); only if makeRequest('food') has finished
关于让这些一次只执行一个的想法
谢谢 如果这些函数实际执行AJAX请求,则最好保持它们异步。您可以发出同步AJAX请求,但这会阻止浏览器响应,并导致糟糕的用户体验 如果这些AJAX请求是一个接一个地发出的,因为它们相互依赖,那么您应该研究您的函数,看看它是否提供了回调机制
makeRequest('food', function()
{
// called when food request is done
makeRequest('shopping');
});
使用jQuery,它看起来是这样的
$.get("/food", function(food)
{
// do something with food
$.get("/shopping", function(shopping)
{
// do something with shopping
});
});
我建议您只需异步编写它们——例如,调用makeRequest('shopping');来自第一个调用的AJAX完成处理程序
如果您不想异步编写代码,请参见我想您有一个回调方法来处理请求的响应?一旦它这样做了,让它提出下一个请求 声明队列的数组和跟踪状态的标志:
var queue = [], requestRunning = false;
在makeRequest方法中:
if (requestRunning) {
queue.push(requestParameter);
} else {
requestRunning = true;
// do the request
}
在回调方法中,在处理响应之后:
if (queue.length > 0) {
var requestParameter = queue.splice(0,1)[0];
// do the request
} else {
requestRunning = false;
}
越来越近了。我尝试了您的第一个示例,但没有调用makeRequest with shopping。我可以发出警报,但它不会被触发,这意味着你做错了什么。你为什么不把你所做的事情贴出来呢?我可以利用回调来避免踩脚趾;谢谢他们一次只执行一个。这些函数中一定有异步执行的东西——也许是AJAX请求?是的,你是对的。有什么我能做的吗?很好,这就是我需要的。可与此处的方法结合使用: