Что-то не так с async / await в моем коде - PullRequest
0 голосов
/ 19 октября 2018

Express API с mysql2. Я хочу использовать асинхронный режим и ждать запроса данных из таблицы продуктов, но ничего не печатать, не знаю, как правильно их использовать.

exports.getAllTours = function(req, res) {
  getTours()
  .then(data => console.log(data))
  .catch(err => console.log(err ));
}

async function getTours() {
    var sql = "Select * from product_prd"
    return new Promise(async function(resolve, reject) {
        let [rows, fields] = await poolQuery(sql)
        setTimeout(function() {
            resolve(rows);
        }, 500);
    })
    .catch(err => reject(err));
}

async function poolQuery(sql, args) {
    return new Promise((resolve, reject) => {
        promisePool.query(sql, args, (err, rows) => {
            if (err)
                return reject(err);
            resolve(rows);
        }).catch(err => reject(err));
    });
}

Я создал такой пул соединений, следуя официальной документации mysql2

const mysql = require('mysql2');

const pool = mysql.createPool({
    host: 'localhost',
    user: 'super',
    port: '3307',
    password: 'sohail',
    database: '784413_wonder',
    waitForConnections: true,
    connectionLimit: 10,
    queueLimit: 0

});
// now get a Promise wrapped instance of that pool
const promisePool = pool.promise();

module.exports = promisePool;

1 Ответ

0 голосов
/ 19 октября 2018

Я почти уверен, что есть ошибка SQL, и вы не можете ее выяснить, потому что обработка ошибок в getTours неверна.

Попробуйте это:

exports.getAllTours = function(req, res) {
  getTours()
  .then(data => console.log(data))
  .catch(err => console.log(err ));
}

async function getTours() {
    var sql = "Select * from product_prd"
        return new Promise(async function (resolve, reject) {
            let rows;
            let fields;
            try {
                [rows, fields] = await promisePool.query(sql, args);
            } catch (err) {
                reject(err);
            }

            setTimeout(function () {
                resolve(rows);
            }, 500);
        });
}
...