我正在尝试弄清_callback系统,但是似乎没有使其正常工作,这是我到目前为止所拥有的。
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,我该如何解决呢?
答案 0 :(得分:1)
改为让GetfromDB1
返回Promises,然后您可以在两个调用上调用Promise.all
,以等待两个函数完成:
var xyz = 0;
var abc = 0;
function GetfromDB1(variable) {
return new Promise((resolve) => {
//get request
abc = 12;
resolve();
});
}
function GetfromDB2(variable) {
return new Promise((resolve) => {
//get request
xyz = 17;
resolve();
});
}
Promise.all([GetfromDB1(), GetfromDB2()])
.then(() => {
console.log(xyz)
console.log(abc)
});
请注意,您需要分配给 outside 变量xyz
和abc
-在DB函数中创建此类变量将使其在本地范围内,这不会工作。
但是,如果将数据库函数解析为到XYZ和ABC值,那将是一个更好的设计:
function GetfromDB1(variable) {
return new Promise((resolve) => {
//get request
resolve(13);
});
}
function GetfromDB2(variable) {
return new Promise((resolve) => {
//get request
resolve(17);
});
}
Promise.all([GetfromDB1(), GetfromDB2()])
.then(([xyz, abc]) => {
console.log(xyz)
console.log(abc)
});
答案 1 :(得分:0)
您的代码中有几个错误:
var xyz = 0;
var abc = 0;
function GetfromDB1(variable, _callback){
//get request
abc = variable;
_callback();
}
function GetfromDB2(variable, _callback){
//get request
xyz = variable;
_callback();
}
function combineData(number1, number2){
GetfromDB1(number1, function(){
console.log('done')
});
GetfromDB2(number2, function(){
console.log('done')
});
}
combineData(13, 17)
// continue to do stuff with data
console.log(xyz + abc);
答案 2 :(得分:0)
最好的解决方案是使用Promises。如果您不能/不想使用它们,则可以使用以下回调方法:
var xyz = 0;
var abc = 0;
combineData(13, 17);
function GetfromDB1(variable, _callback){
//get request
abc = variable;
_callback();
}
function GetfromDB2(variable, _callback){
//get request
xyz = variable;
_callback();
}
function combineData(number1, number2){
GetfromDB1(number1, function(){
console.log('done 1');
GetfromDB2(number2, function(){
console.log('done 2');
console.log(xyz + abc) ;
});
});
}