在 module.export 的方法中使用 async/await

Use async/await in a method of module.export

我有问题,我想创建一个模块来导出对 db 的各种调用,并在我的应用程序中将其与 await 一起使用...这里有一个示例:

// module
const config = require("../config/config");
const mysql = require("mysql2/promise");

const getUsersData = async (args) => {

  const db = await connectDb();

  let rows, fields;
  try {
    [ rows, fields ] = await db.query("SELECT * FROM users WHERE id !== ? LIMIT ?", [0, 10]);
  } catch (e) {
    return e;
  }
  return rows;
};

const connectDb = async () => {
  const db = await mysql.createConnection({
    host: config.dbhost,
    user: config.dbuser,
    password: config.dbpassword,
    database: config.dbname,
  });

  return db;
};

module.exports = {getUsersData, connectDb}

在我的应用程序中,我想要:

const myModule = require("./db/lyDb");

let myData = await myModule.getUsersData({args: 'my argument'});

问题是我收到以下错误await is only valid in async function

如何解决?发送

能否将主要应用程序代码包装在 async 函数中?

const myModule = require("./db/lyDb");

const main = async () => {
  let myData = await myModule.getUsersData({args: 'my argument'});
  // rest of your application
}

main()

这个代码

let myData = await myModule.getUsersData({args: 'my argument'});

必须从 async 函数执行。

async function someFunc() {

    let myData = await myModule.getUsersData({args: 'my argument'});

}
someFunc();

您遇到的问题是您使用的是 Top-Level Await

const myModule = require("./db/lyDb");

let myData = await myModule.getUsersData({args: 'my argument'});

Await 只能在您可能的配置中的异步函数中调用 运行 Node.JS

为了帮助您,一种方法是使用

const myModule = require("./db/lyDb");
(async () => {
   let myData = await myModule.getUsersData({args: 'my argument'});
})();

实际上,使用 Top-Level 等待,你的 JS 必须是一个模块,你必须定位或 运行 支持 ES2018 和 ESNext 模块系统的 Node.JS 版本

另见

错误是不言自明的,您不能在异步函数外调用 await。您应该使用 then 子句来访问响应,或者创建一个异步函数来使用 await。

myModule.getUsersData({args: 'my argument'}).then(res => {
// do something
})

const main = async () => {
    let myData = await myModule.getUsersData({args: 'my argument'});
}
main();