Javascript 等待函数完成以运行下一个函数

Javascript 等待函数完成以运行下一个函数,javascript,jquery,html,ajax,asynchronous,Javascript,Jquery,Html,Ajax,Asynchronous,我试图让一个函数一个接一个地运行,但是和complete都与我调用的函数同时运行 控制台正在打印出2,1,应该是1是第一个,如何让完整的函数等待我的fetchingFunction完成执行,请帮助 var loopControl=0; $('[data toggle=tab]')。打开('show.bs.tab',函数(e){ if(loopControl==0){ e、 预防默认值(); var ref=$(this.attr('href').replace('#',''); loopCon

我试图让一个函数一个接一个地运行,但是和complete都与我调用的函数同时运行

控制台正在打印出2,1,应该是1是第一个,如何让完整的函数等待我的fetchingFunction完成执行,请帮助

var loopControl=0;
$('[data toggle=tab]')。打开('show.bs.tab',函数(e){
if(loopControl==0){
e、 预防默认值();
var ref=$(this.attr('href').replace('#','');
loopControl=1;
$.ajax({
url:fetchingFunction(),
成功:函数(){
},
完成:函数(){
假函数2();
$('.+ref+'_-tab')。单击();
}
});
}否则{
loopControl=0;
}
});
函数fetchingFunction(){
setTimeout(函数(){
控制台日志(“1”);
}, 2000);
}
函数fakeFunction2(){
控制台日志(“2”)
}

…内容1。。。 …内容2。。。 …内容3。。。
我修改了您的fetchingFunction以返回一个承诺,因此它的行为就像您在那里进行异步调用一样

首先,调用fetchingFunction(),它将返回一个承诺

其次,将回调附加到该承诺,以便在承诺完成后执行,并接受返回的值

var loopControl=0;
$('[data toggle=tab]')。打开('show.bs.tab',函数(e){
如果(loopControl!=0)返回;
loopControl=1;
e、 预防默认值();
var ref=this.href.replace('#','');
fetchingFunction()。然后(函数(url){
console.log(url);
$.ajax({
url:url,
完成:函数(){
假函数2();
//$('.+ref+'_-tab')。单击();
loopControl=0;//处理完成后,重置锁
}
});
});
});
函数fetchingFunction(){
返回新承诺(功能(解决、拒绝){
setTimeout(函数(){
控制台日志(“1”);
解决('https://stackoverflow.com/');
}, 2000);
});
}
函数fakeFunction2(){
控制台日志(“2”);
}

…内容1。。。 …内容2。。。 …内容3。。。
fetchingFunction
,忽略其中的setTimeout,不会返回用于
url
的字符串。您的脚本编写非常混乱。不要使用
async:false,
。要让一个函数一个接一个地运行,要么两个函数都不执行异步操作,或者第一个函数应该返回一个承诺/延迟,第二个函数应该从附加到承诺/延迟的回调调用,以便在其解析时执行。@Taplar感谢您的快速响应,因为我的实际提取函数非常耗时,我想确保在提取函数完成后加载选项卡内容,这就是我设定等待时间的原因。如果你给我们一个精简版的实际逻辑,那会很有帮助。正如你所看到的,你将得到关于你是如何构建这个问题的问题,而不是关于你实际存在的逻辑的问题。小心…@MikeMcCaughan我不是建议他们使用new Promise()。我只是用它来模拟一个虚假的ajax请求。当然,但这种模式在“野外”中被看到的越多,我就越看到人们将其投入到我要回顾的代码中。对于那些遇到答案并认为这是创建异步函数的好方法的人来说,这只是一个警告,仅此而已。