JavaScript等待两个函数完成,然后继续执行函数三
我正试图找出_回调系统,但它似乎无法正常工作,这就是我目前所拥有的JavaScript等待两个函数完成,然后继续执行函数三,javascript,Javascript,我正试图找出_回调系统,但它似乎无法正常工作,这就是我目前所拥有的 var xyz = 0; var abc = 0; combineData(13, 17) function GetfromDB1(variable, _callback){ //get request var abc = variable; _callback(); } function GetfromDB2(variable, _callback){ //get request va
var xyz = 0;
var abc = 0;
combineData(13, 17)
function GetfromDB1(variable, _callback){
//get request
var abc = variable;
_callback();
}
function GetfromDB2(variable, _callback){
//get request
var xyz = variable;
_callback();
}
function combineData(number1, number2){
function GetfromDB1(number1, function(){
console.log('done')
});
function GetfromDB2(number2, , function(){
console.log('done')
});
// continue to do stuff with data
console.log(xyz + abc)
}
似乎最后两个控制台日志不等待回调,并且两个都给0,我如何解决这个问题?改为让
GetfromDB1
s返回承诺,然后您可以调用Promise。两个调用上的所有都等待两个函数完成:
var xyz=0;
var-abc=0;
函数GetfromDB1(变量){
返回新承诺((解决)=>{
//获取请求
abc=12;
解决();
});
}
函数GetfromDB2(变量){
返回新承诺((解决)=>{
//获取请求
xyz=17;
解决();
});
}
所有([GetfromDB1(),GetfromDB2()]))
.然后(()=>{
console.log(xyz)
控制台日志(abc)
});代码>您的代码中有几个错误:
您需要调用GetfromDB1,而不是在combineData()中再次声明它
在GetfromDB1和GetfromDB2中,不需要声明abc和xyz,否则会对全局变量进行阴影处理,而使用不会传播到外部的局部变量
var xyz=0;
var-abc=0;
函数GetfromDB1(变量,_回调){
//获取请求
abc=变量;
_回调();
}
函数GetfromDB2(变量,_回调){
//获取请求
xyz=变量;
_回调();
}
函数组合数据(编号1,编号2){
GetfromDB1(编号1,函数(){
console.log('done')
});
GetfromDB2(数字2,函数(){
console.log('done')
});
}
组合数据(13,17)
//继续处理数据
控制台日志(xyz+abc)代码>最好的解决方案是使用。如果您不能/不想使用它们,这里有一个回调解决方案:
var xyz=0;
var-abc=0;
联合数据(13,17);
函数GetfromDB1(变量,_回调){
//获取请求
abc=变量;
_回调();
}
函数GetfromDB2(变量,_回调){
//获取请求
xyz=变量;
_回调();
}
函数组合数据(编号1,编号2){
GetfromDB1(编号1,函数(){
console.log('done1');
GetfromDB2(数字2,函数(){
console.log('done2');
控制台日志(xyz+abc);
});
});
}
将GetFromDB
更改为承诺是否可行,并在最后使用promise.All()
来解决承诺?存在范围问题,您正在重新说明函数和变量请显示//get request
的作用/返回。回调是一种古老的模式;它们的几乎所有用法都转换为承诺或可观测。只需一个简单的数组,我会注意这里的显式承诺构造反模式。让OP显示//get request
后面的实际代码可能是值得的。否则,这就是一个不必要地使同步代码异步的示例。感谢您的承诺。两个调用都是异步的,因此工作得非常完美