使用db查询作为promise

时间:2018-04-06 22:12:59

标签: javascript node.js

我正在尝试使用sql查询作为承诺。我似乎无法让它发挥作用:

   query: (sql, args) => {
    if (args) sql = mysql.format(sql, args);
    return new Promise((resolve, reject) => {
      pool.getConnection((err, connection) => {
        if (err) {
          console.log(err);
          reject(Error(err.code));
        }

        connection.query(sql, (err, results) => {
          connection.release(); // always put connection back in pool after last query
          if (err) {
            console.log(err);
            resolve([]);
          }

          resolve(results);
        });
      });
    });
  },

以下是查询本身:

async function dbCall(sql, arg) {
      let data = await db.query(sql, arg);
      console.log(data);
      data = data[0];
      return data;
    }

这是游泳池:

var pool = mysql.createPool({
  host: 'localhost',
  user: 'user',
  password: 'pass',
  database: 'db',
});

我正在尝试做什么: 我试图让它不会挂在异步功能上。我希望它在整个异步函数中返回一个值,而不仅仅是在其内部。

目前,它根本不起作用。但是,如果是这样的话,我希望row在我的整个函数中定义,而不是仅在db.query内定义。

我不确定这是否合理,但如果您需要更多澄清,只需提出任何问题。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你就会误解应该如何处理承诺。 Promise使用Sub CreateButtons() Dim i As Long Dim shp As Object Dim dblLeft As Double Dim dblTop As Double Dim dblWidth As Double Dim dblHeight As Double Application.ScreenUpdating = False Application.EnableEvents = False Application.Calculation = xlCalculationManual ' 'Do your stuff ' Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True Application.ScreenUpdating = True End Sub 函数仅在异步请求被finsihed后执行某些操作。

用简单的英语读得很好。执行我的异步请求然后对数据执行某些操作。

试试这个:

then()

此外,您可以使用异步功能。这允许使用与同步函数类似的方式处理异步函数,其中代码将按顺序执行,而不必担心在db.query(userSQL, username).then(res => console.log(res)) 函数内部链接和嵌套其他代码

then()

作为旁注。当我第一次进入Promise时,这对我非常有帮助。

we can build a wrapper