Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
promise.resolve中for循环内的mySQL查询不起作用_Mysql_Node.js_Express_Promise - Fatal编程技术网

promise.resolve中for循环内的mySQL查询不起作用

promise.resolve中for循环内的mySQL查询不起作用,mysql,node.js,express,promise,Mysql,Node.js,Express,Promise,我已经花了几个小时试图弄明白这一点以及尝试其他方法。我觉得在我对承诺的认识上有差距。我想做的是通过express运行一些mysql查询,查询stations变量中的可变数量的数字。我目前对我编写的代码的理解是,我在Promise.resolve中调用我的getStops函数,这对我来说意味着。然后,在该Promise被解析之前,after将不会执行,这意味着我的所有查询都已被调用并返回。我将每个查询的结果推送到一个名为collection的变量中,该变量不在getStops函数的作用域内。我希望

我已经花了几个小时试图弄明白这一点以及尝试其他方法。我觉得在我对承诺的认识上有差距。我想做的是通过express运行一些mysql查询,查询stations变量中的可变数量的数字。我目前对我编写的代码的理解是,我在Promise.resolve中调用我的getStops函数,这对我来说意味着。然后,在该Promise被解析之前,after将不会执行,这意味着我的所有查询都已被调用并返回。我将每个查询的结果推送到一个名为collection的变量中,该变量不在getStops函数的作用域内。我希望我的集合变量在.then调用中包含所有查询结果,但它返回[]。我已将查询结果注销,它们返回所需的数据。在我进行故障排除时,我看到,.then中的console.logcollection在承诺解决之前被调用,这对我来说毫无意义,导致我认为我在这里错误地使用了承诺,或者我有一个与承诺无关的错误。

你对承诺有错误的期望。解决。表达式Promise.resolvegetStops将承诺包装getStops返回的任何内容。它不会强制getStops执行所需的行为,即返回一个承诺,该承诺将在所有connection.query查询完成后得到解决。为了避免我不得不搜索它,您能否提供一个指向connection.query API的链接?我需要知道它是否会回报,或者是否能够回报一个承诺。
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);
    })
  })