在 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();
我有问题,我想创建一个模块来导出对 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();