async await не отвечает в express.js с mysql.js - PullRequest
0 голосов
/ 29 июня 2018

Сначала я пытаюсь вставить данные в таблицу ресторана .

После того, как все закончено (журнал консоли). Следует вызвать второй запрос (Вставить аудит). Но он не вызывает этот запрос и выполняет первую функцию.

Как мне это исправить?

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
}

Ответы [ 2 ]

0 голосов
/ 18 июля 2018

Вы не можете использовать async / await в любом месте. Если вы хотите использовать async / await, это должно быть обещание. Поскольку mysqljs не является обещанной библиотекой, вы не можете использовать async / await здесь.

0 голосов
/ 29 июня 2018

Вы не должны использовать обратный вызов с 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
    }
}
...