MySQL NodeJS .then () не является функцией - PullRequest
0 голосов
/ 11 декабря 2019

Не могу ли я использовать обещание для запроса nodeJS mysql?

// My DB settings
const db = require('../util/database');

db.query(sqlQuery, [param1, param2])
        .then(result => {
            console.log(result);
        })
        .catch(err => {
            throw err;
        });

Возвращается: TypeError: db.query(...).then is not a function

Ответы [ 2 ]

3 голосов
/ 11 декабря 2019

mysql пакет не поддерживает обещание. Мы можем использовать then, только вызов функции возвращает обещание. Вы можете использовать mysql2 со встроенной поддержкой Promise . Это также сделает ваш код более читабельным. Из документации mysql2:

 async function main() {
        // get the client
          const mysql = require('mysql2/promise');
         // create the connection
         const connection = await mysql.createConnection({host:'localhost', 
          user: 'root', database: 'test'});
          // query database
          const [rows, fields] = await connection.execute(query);
          // rows hold the result
        }

Я бы также порекомендовал вам узнать об обратных вызовах, обещаниях и асинхронных ожиданиях

2 голосов
/ 11 декабря 2019

Вы упомянули в комментариях, что вы хотите, чтобы после блока запроса ожидалась логика, не помещая эту логику в обратный вызов. Обернув метод Обещанием, вы можете сделать это следующим образом:

try {
    const result = await new Promise((resolve, reject) => {
        db.query(sqlQuery, (error, results, fields) => {
            if (error) return reject(error);
            return resolve(results);
        });
    });

    //do stuff with result
} catch (err) {
    //query threw an error
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...