0

首先,我试图将数据插入到餐厅表中

完成后(控制台日志)。它应该调用第二个查询(插入审计)。但它不会调用该查询并保留第一个函数。

我该如何解决?

async function createRestaurant(req, res, next) {
    const restaurant = {
        name: req.body.name,
        description: req.body.description
    }

    const audits = {
        description: req.body.description
    }



    let query = "INSERT INTO restaurant SET ?";
    await connection.query(query, restaurant, (error, results) => {
        if (error) {
            console.log("Error at res")
            return true;
        } else {
            console.log("200 res")
            return true;

        }
    });

    let query2 = "INSERT INTO audits SET ?";
    await connection.query(query2, audits, (error, results) => {
        if (error) {
            console.log("Error at audit")

        } else {
            console.log("200 res")

        }
    });
}

module.exports = {
    createRestaurant: createRestaurant
}
4

2 回答 2

2

你不应该在 async/await 中使用回调,async/await 的目的是以同步的方式编写异步代码。实际上,您可以返回等待调用并使用 try/catch 块。

在您的示例中,该函数在第一个查询回调中返回,因此永远不会到达第二个查询。

async function createRestaurant(req, res, next) {
    const restaurant = {
      name: req.body.name,
      description: req.body.description
    }

    const audits = {
      description: req.body.description
    }

    try {
      let query = "INSERT INTO restaurant SET ?";
      let resRestaurant = await connection.query(query, restaurant);
      console.log(200, 'resRestaurant');

      let query2 = "INSERT INTO audits SET ?";
      let resAudit = await connection.query(query2, audits);
      console.log(200, 'resAudit');

      return {resRestaurant, resAudit}; // You can return data here

    } catch(e) {
      console.log('err in requests', e); // you can also use try/catch block for each request
    }
}
于 2018-06-29T10:38:35.770 回答
0

你不能在每个地方都使用 async / await 。如果你想使用 async / await 它应该是一个承诺。由于 mysqljs 不是基于承诺的库,因此您不能在此处使用 async / await。

于 2018-07-18T10:51:19.543 回答