【问题标题】:Node Js asyncronic mysql queryNode Js异步mysql查询
【发布时间】:2020-08-08 11:59:23
【问题描述】:

我正在尝试在 NodeJS 中进行异步查询,但结果不断收到 undefined,我的代码是:

async function Nuevo_Parametro() {
  sqlStr = "select * from Parametros limit 10";
  conCasos.query(sqlStr, function(err, Resultado, fields) {
    if (err) throw err;
    return Resultado;
  });
}

Nuevo_Parametro().then(Resultado => {
  console.log(Resultado);
});

我做错了什么?

提前致谢

【问题讨论】:

    标签: mysql node.js async-await


    【解决方案1】:

    您正在将回调样式与 Promises 混合使用。 mysql 函数不返回 Promise,因此不能连接它。它使用回调样式 - 意味着“异步”部分在您作为参数提供的回调中执行。
    你需要做的是用一个 Promise 包裹它并返回它。类似于以下内容

    function Nuevo_Parametro() {
      sqlStr="select * from Parametros limit 10"
      return new Promise((resolve, reject) => {
        conCasos.query(sqlStr, function(err, Resultado,fields) {
          if (err) {
            return reject(err)
          };
          resolve(Resultado);
        })
      })
    }
    Nuevo_Parametro().then(Resultado => {
      console.log(Resultado)
    })
    

    在这里,我们返回一个我们正在创建的承诺,并在回调 query 提供,我正在解决它。为简单起见,我保留了变量和属性名称。

    如果您要广泛使用查询,每次newing 承诺可能会很乏味,因此正如github ticket 中提到的,您可以使用包装器like this one

    或者可以使用原生的promisify 实用程序作为this comment states

    const fn = util.promisify(connection.query).bind(connection);
    const rows = await fn('SELECT col1, col2 FROM users WHERE email = ?', [email]);
    

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      相关资源
      最近更新 更多