Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
Javascript 等待JS mysql包无法正常工作_Javascript_Mysql_Node.js_Async Await - Fatal编程技术网

Javascript 等待JS mysql包无法正常工作

Javascript 等待JS mysql包无法正常工作,javascript,mysql,node.js,async-await,Javascript,Mysql,Node.js,Async Await,我对Javascript/node非常陌生,还不了解这个概念。我不清楚以下代码。我希望在从数据库检索所有结果之前不要显示“END”。我希望您不要告诉我把它放在行输出后面,这确实是一个解决问题的方法。我认为“wait”将使代码真正等待其处理完成 const mysql = require('mysql'); // or use import if you use TS const util = require('util'); const conn = mysql.createConnection

我对Javascript/node非常陌生,还不了解这个概念。我不清楚以下代码。我希望在从数据库检索所有结果之前不要显示“END”。我希望您不要告诉我把它放在行输出后面,这确实是一个解决问题的方法。我认为“wait”将使代码真正等待其处理完成

const mysql = require('mysql'); // or use import if you use TS
const util = require('util');
const conn = mysql.createConnection({
    "host"     : "",
    "user"     : "",
    "password" : "",
    "database" : "",
});

// node native promisify
const query = util.promisify(conn.query).bind(conn);

(async () => {
  try {
    const rows = await query('select count(*) as count from table');
    console.log(rows);
  } finally {
    conn.end();
  }
})()

console.log("END");

谢谢你不能那样使用它。如果没有回调,mysql将对结果进行流式处理,您需要在事件侦听器上使用

根据文件:

流式处理行时,不能提供对query()方法的回调

因此,按照您的方式,您需要添加事件并解决承诺:

async function myQueryFunction(str, replacements) {
  return new Promise(resolve => {
    let rows = []
    query(str, replacements)
      .on('result', (row) => {
        // Do something with the row
        rows.push(row)
      })
      .on('end', () => resolve(rows))
  })
}
否则,您需要使用回调调用
query
方法,因此创建一个解析承诺的查询函数

async function myQueryFunction(str, replacements) {
  return new Promise(resolve => {
    query(str, replacements, (err, rows) => {
      resolve(rows)
    })
  })
}
最后,您可以调用根据上述示例之一创建的方法,如下所示:

(async () => {
  try {
    const rows = await myQueryFunction('select count(*) as count from table');
    console.log(rows);
  } finally {
    conn.end();
  }
})()


wait仅适用于promisfy,您不能等待其他东西,尽管promisfy为我做了这件事。将
console.log(“END”)
移动到finally块后的行中,或将其放入finally块中。
wait
使异步函数代码中它下面的代码等待Promise解析。它不会神奇地影响已经运行的代码。好吧,但我的问题是如何在不这样做的情况下完成它。因为一般来说,我已经非常简化了这个问题,因为在一般情况下,类必须用DB中的值初始化,并且我不希望其他代码在这样做时运行。