mysql - Nodejs 异步/等待 MySQL 查询

标签 mysql node.js async-await

我试图在 Node.JS 中顺序执行 2 个 MySQL 查询。 MySQL 查询本身可以正常工作。 我想用 async/await 函数来完成它,以确保在更新之前插入记录。 这是代码:

router.post('/assign_new_item_id', async (req, res) => {
   .....
   try {
      let qr1= "INSERT INTO foo1 ........;"              
      await pool.query( qr1, (err) => {
         if (err) throw err;
      });
      let qr2= "UPDATE foo1 .....;"
      await pool.query( qr2, (err) => {
         if (err) throw err;
      });
   }catch(err){
     console.log(err)
} 

执行似乎在第一个 await block 中“挂起”。确保两个查询都相应执行的最佳方法是什么。 在此先感谢您的帮助。

最佳答案

await,你需要一个Promise,而不是Callback。在您的情况下,您没有返回等待的 promise 。

router.post('/assign_new_item_id', async (req, res) => {
    // .....
    try {
        let qr1 = "INSERT INTO foo1 ........;"
        await new Promise((res, rej) => {
            pool.query(qr1, (err, row) => {
                if (err) return rej(err);
                res(row);
            });
        });
        let qr2 = "UPDATE foo1 .....;"
        await new Promise((res, rej) => {
            pool.query(qr2, (err, row) => {
                if (err) return rej(err);
                res(row);
            });
        });
    } catch (err) {
        console.log(err)
    }
});

我在这里 promise pool.query 方法并返回 promise 。

关于mysql - Nodejs 异步/等待 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56807314/

相关文章:

MySQL - 合并表行(分组依据不起作用)

mysql - Amazon RDS MySQL 复制

Mysql bool 运算符全文搜索

mysql - 在关系表中搜索并获取正确的计数

node.js - 在 Angular CLI 应用程序中安装 express 时出现 "ENOTEMPTY: directory not empty, rmdir ....."错误。

javascript - s3 未上传文件并收到 SignatureDoesNotMatch 错误

javascript - 如果在事件处理程序之前或之间有等待调用,React 不会在事件处理程序中批处理 setState 调用

node.js - Redis 和 NodeJs - 无法授权用户

c# - 在 asp.net 核心应用程序中应该如何实现对数据库的异步日志记录?

c# - 响应式扩展订阅调用等待