promise.resolve中for循环内的mySQL查询不起作用
我已经花了几个小时试图弄明白这一点以及尝试其他方法。我觉得在我对承诺的认识上有差距。我想做的是通过express运行一些mysql查询,查询stations变量中的可变数量的数字。我目前对我编写的代码的理解是,我在Promise.resolve中调用我的getStops函数,这对我来说意味着。然后,在该Promise被解析之前,after将不会执行,这意味着我的所有查询都已被调用并返回。我将每个查询的结果推送到一个名为collection的变量中,该变量不在getStops函数的作用域内。我希望我的集合变量在.then调用中包含所有查询结果,但它返回[]。我已将查询结果注销,它们返回所需的数据。在我进行故障排除时,我看到,.then中的console.logcollection在承诺解决之前被调用,这对我来说毫无意义,导致我认为我在这里错误地使用了承诺,或者我有一个与承诺无关的错误。你对承诺有错误的期望。解决。表达式Promise.resolvegetStops将承诺包装getStops返回的任何内容。它不会强制getStops执行所需的行为,即返回一个承诺,该承诺将在所有connection.query查询完成后得到解决。为了避免我不得不搜索它,您能否提供一个指向connection.query API的链接?我需要知道它是否会回报,或者是否能够回报一个承诺。promise.resolve中for循环内的mySQL查询不起作用,mysql,node.js,express,promise,Mysql,Node.js,Express,Promise,我已经花了几个小时试图弄明白这一点以及尝试其他方法。我觉得在我对承诺的认识上有差距。我想做的是通过express运行一些mysql查询,查询stations变量中的可变数量的数字。我目前对我编写的代码的理解是,我在Promise.resolve中调用我的getStops函数,这对我来说意味着。然后,在该Promise被解析之前,after将不会执行,这意味着我的所有查询都已被调用并返回。我将每个查询的结果推送到一个名为collection的变量中,该变量不在getStops函数的作用域内。我希望
const getSelectStations = (stations => {
let query = 'SELECT * FROM stops INNER JOIN stations ON stops.station_id = stations.id WHERE stops.line_id IN (?)';
let collection = [];
const getStops = () => {
for (let i = 0; i < stations.length; i++) {
connection.query(query, [stations[i]], (err, results) => {
if (err) {
return err;
} else {
collection.push(results);
}
})
}
}
Promise.resolve(getStops())
.then(() => {
console.log('AFTERRRRRRRRRRRRR', collection); //results in initial value of []
})
.catch(err => {
console.log(err);
})
})