Nodejs 异步/等待 MySQL 查询

gor*_*yef 3 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)
} 
Run Code Online (Sandbox Code Playgroud)

执行似乎在第一个等待块内“挂起”。确保两个查询同时执行的最佳方法是什么?预先感谢您的任何帮助。

Ari*_*rty 6

你需要的await是承诺,而不是回调。在您的情况下,您不会返回等待的承诺。

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)
    }
});
Run Code Online (Sandbox Code Playgroud)

在这里我承诺了该pool.query方法并返回一个承诺。