Я получаю обещание {<pennding>} на асинхронную функцию node.js - PullRequest
0 голосов
/ 16 октября 2019

У меня есть эта функция в классе на nodejs. Он получает все строки в БД.

module.exports = class fooClass {
  static async fooFunc() {
    const mysql = require('mysql');
    const util = require('util');
    const conn = mysql.createConnection({
      host: 'localhost',
      user: 'root',
      password: '',
      database: 'dbname'
    });

    // node native promisify
    const query = util.promisify(conn.query).bind(conn);

    try {
      const rows = await query('SELECT * FROM `dbtable`');
      return rows;
    } finally {
      conn.end();
    }
  }
}

Когда я вызываю эту функцию,

let result = fooClass.fooFunc();
console.log(result);

Я получаю это:

Promise { <pennding> }

Я могу использовать fooClass.fooFunc().then..., но для этого потребуется добавить функцию обратного вызова на then, что потребует большого количества изменений.

Есть ли способ получить строки, просто вызвав let result = fooClass.fooFunc();?

Заранее спасибо.

1 Ответ

1 голос
/ 16 октября 2019

Когда вызов функции выполняется внутри функции, вы можете написать ее, как предложено @Bravo:

let result = await fooClass.fooFunc();

Ссылка для асинхронная / ожидающая

Если вызатем вызываем его вне функции:

(async function(){
   let result = await fooClass.fooFunc();
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...