【发布时间】:2020-10-12 14:16:55
【问题描述】:
这是我的代码
const mysqlssh = require('mysql-ssh');
var Promise = require('promise');
const startSSHSQLTunnel = () =>{
return mysqlssh.connect(
{
host: 'xxx.xxx.xx.xxx',
user: 'ball',
password: 'r252_bat'
},
{
host: '192.xxx.xxx.xxx',
user: 'portal',
password: 'r252_bat',
database: 'mydb'
}
)
}
exports.getSignupSummary = async() => {
let res = []
let queryStrings = ['SELECT year, WorkWeek, COUNT(*) AS Count from (SELECT YEAR(signed_up) as year, WEEK(signed_up) as WorkWeek from `chatbots` where signed_up is not null) temp_table group by WorkWeek, year',
'SELECT year, WorkMonth, COUNT(*) AS Count from (SELECT YEAR(signed_up) as year, MONTH(signed_up) as WorkMonth from `chatbots` where signed_up is not null) temp_table group by WorkMonth, year',
'SELECT COUNT(*) as count from `chatbots`']
//SELECT COUNT(*) as count from `chatbots`;
getUserData = function(qs, cb) {
startSSHSQLTunnel().then(client => {
client.query(qs,
function(err, results) {
if (err)
return cb(err);
cb(undefined, results);
})});
}
// Usage:
queryStrings.map(x => {
getUserData(x,
function(err, results) {
res.push(results);
}
)
});
console.log(res);
}
我正在尝试获取查询结果并存储在一个名为“res”的数组中 但是我面临以下问题
-
回调函数的结果可以被 console.logged 但如果我存储在数组中然后尝试打印出来,我会看到一个空数组。
-
我尝试使用 async -> await 但没用
-
我试图将所有内容封装在一个新的承诺中,然后解决结果,但这没有意义,因为我得到了一个空的承诺
请指教
【问题讨论】:
-
看起来像一个异步问题,我认为当你
console.log它时数组没有填充 -
我确实尝试过等待,但我得到了未决的承诺
-
我认为你可以使用 .map 函数在
getUserData上返回一个承诺数组,然后使用await Promise.all来解决这些承诺 -
可以分享代码吗?
-
下面回答,如果不行告诉我,我们会调试