如何以同步方式运行2个Javascript块
我遇到了一个场景,我需要在下面的场景中运行。我已经准备好了我的代码,只需要同步执行两个javascript块如何以同步方式运行2个Javascript块,javascript,jquery,Javascript,Jquery,我遇到了一个场景,我需要在下面的场景中运行。我已经准备好了我的代码,只需要同步执行两个javascript块 var baseQuery ='test'; var mainQuery ='test'; if(baseQuery!='') { //Ajax call } if(mainQuery!='') { //Ajax Call } 如何确保第二个代码块在第一次完成执行后运行。第一个ajax调用成功后,您可以像这样运行第二个代码块 var baseQuery ='test'; va
var baseQuery ='test';
var mainQuery ='test';
if(baseQuery!='')
{
//Ajax call
}
if(mainQuery!='')
{
//Ajax Call
}
如何确保第二个代码块在第一次完成执行后运行。第一个ajax调用成功后,您可以像这样运行第二个代码块
var baseQuery ='test';
var mainQuery ='test';
var bool=false;
if(baseQuery!='')
{
//Ajax call
//Ajax success (bool=true;)
}
if(mainQuery!='' && bool ==true)
{
//Ajax Call
}
var baseQuery ='test';
var mainQuery ='test';
var bool=false;
if(baseQuery!='')
{
//Ajax call
//Ajax success (if(mainQuery!=''))
}
if(baseQuery!='')
{
$.ajax({
type: "POST",
url: url,
beforeSend: function (xhr) {
},
success: function (data) {
if(mainQuery!='')
{
//Ajax Call
$.ajax({
});
}
}
});
}
这取决于用于实现AJAX的库。但是,AJAX调用通常使用承诺,因此您只需要在第一个AJAX请求的解析块上调用第二个函数 例如,如果您使用的是jQuery,下面是您可以使用的方法:
$.ajax({
url: API_URL + "/endpoint",
method: "GET"
}).done(function (data) { //This happens after the AJAX promise has resolved
//call second block here
})
.fail(function(e){ //This block is called in case of error in AJAX query
console.log(e);
});
})
编辑:这个ajax查询包含在if(baseQuery!=''){}中,一种方法是使用承诺,并在第一次ajax调用成功时解决它
var defer = $.Deferred();
var baseQuery ='test';
var mainQuery ='test';
if(baseQuery!='')
{
//resolve the promise in the success of first ajax call
defer.resolve(...) // do it inside your success handler in error you can reject
}
if(mainQuery!='')
{
defer.promise().then(function(data){
//this will execute after complete of first ajax call;
})
}
您可以将逻辑放入第二个块的成功处理程序中,并在内部检查mainQuery!=''然后执行条件代码
快乐编码:)看看$q,问题是两个查询都可以是空的,所以不能将其放在第一个查询的成功块中。因为假设如果第一个条件为false,那么它也不会执行第二个条件,那么您所要做的就是在第一个if之后写一个else语句,然后在它里面写第二个块,这样要么您首先执行第一个块并在AJAX成功中调用第二个,要么您不执行第一个块代码并直接运行第二个块。