var button_settings=[];
con.query("SELECT * from ht_button", function (err, result, fields){
if (err) throw err;
button_settings.push(result);
});
console.log(button_settings);
var res1=[];
var res2=[];
var res3=[];
async function doStuff(){
await new Promise(function(resolve, reject){
con.query("SELECT * FROM vm_admin", function (err, result, fields) {
if (err) throw err;
resolve();
res1.push(result);
});
});
await new Promise(function(resolve, reject){
con.query("SELECT * FROM vm_banks", function (err, result, fields) {
if (err) throw err;
resolve();
res2.push(result);
});
});
console.log(res1);
console.log('----------------');
console.log(res2);
}
doStuff();
var button_settings=[];
con.query("SELECT * from ht_button", function (err, result, fields){
if (err) throw err;
button_settings.push(result);
console.log(button_settings); //console after the query completes
});
因此,要使流像同步的一样工作,您将使用 button_settings ,创建这样的私有函数,
var button_settings=[];
con.query("SELECT * from ht_button", function (err, result, fields){
if (err) throw err;
button_settings.push(result);
_processButtonSettings();
});
//put all your code related to button_settings here
function _processButtonSettings(){
console.log(button_settings);
//and more code...
}
var button_settings=[];
await new Promise(function(resolve, reject){
con.query("SELECT * from ht_button", function (err, result, fields){
if (err) reject(err)
button_settings.push(result);
resolve()
});
}).catch(function(err){/* handle err */})
console.log(button_settings);
async function doStuff(){
var button_settings=[];
await new Promise(function(resolve, reject){
con.query("SELECT * from ht_button", function (err, result, fields){
if (err) reject(err)
button_settings.push(result);
resolve()
});
}).catch(function(err){/* handle err */})
console.log(button_settings);
}
doStuff();
我没有用实际的mysql测试过这个代码。。。但我这里有一个等价的测试:
async function doStuff(){
var button_settings=[];
await new Promise(function(resolve, reject){
setTimeout(function(){
button_settings = ["foobar"];
resolve();
},1000)
});
console.log(button_settings);
}
doStuff();
var button_settings=[];
con.query("SELECT * from ht_button", function (err, result, fields){
if (err) throw err;
else setValue(result);
});
function setValue(value) {
button_settings = value;
console.log(button_settings);
}
5条答案
按热度按时间pftdvrlh1#
试着在这里履行诺言
在查询函数回调之前激发
whlutmcx2#
我已经检查了上面的代码和它的工作良好,谢谢大家的快速支持。
23c0lvtd3#
查询的数据库本质上是异步的,因此
console.log
不等待来自的结果con.query
然后立即执行。因此,你得到[]
印刷的。但如果你有记录result
查询完成后,如果将console.log(button_settings);
内部con.query
功能如下:将代码更改为
因此,要使流像同步的一样工作,您将使用
button_settings
,创建这样的私有函数,7gcisfzg4#
解决这个问题的正确方法是写作
console.log
在回调中。这是我们极力推荐的。现在来谈谈你想要的部分,即写作
console.log
之后con.query
在同一个街区而且你不想console.log
在单独的函数中(这是我从问题和你在其他答案中的评论中理解的)要做到这一点,你必须 Package
con.query
承诺和使用await
等待承诺的实现。唯一的问题是你只能用
await
内部async
功能。所以让我们用一个代码来 Package 整个过程async
功能最终代码:
我没有用实际的mysql测试过这个代码。。。但我这里有一个等价的测试:
ia2d9nvy5#
connection.query是异步的,这意味着当您调用
console.log(button_settings)
,button_settings
尚未设置。