首页 > 解决方案 > 我得到承诺{关于 node.js 异步函数

问题描述

我在 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();吗?

提前致谢。

标签: javascriptnode.jsasynchronous

解决方案


当函数调用在函数中完成时,您可以按照@Bravo 的建议编写它:

let result = await fooClass.fooFunc();

异步/等待的链接

如果您在函数外部调用它,则:

(async function(){
   let result = await fooClass.fooFunc();
})();

推荐阅读