Javascript Can';t解析导出的异步函数NodeJS上的承诺
因此,我在导出异步函数时遇到了这个问题:Javascript Can';t解析导出的异步函数NodeJS上的承诺,javascript,mysql,node.js,bluebird,Javascript,Mysql,Node.js,Bluebird,因此,我在导出异步函数时遇到了这个问题: async function getItemData(callback) { let result = await pool.getConnection(async function(err, con) { if (err) throw err; let queryPromise = await new Promise((resolve, reject)=> { con.query
async function getItemData(callback) {
let result = await pool.getConnection(async function(err, con) {
if (err) throw err;
let queryPromise = await new Promise((resolve, reject)=> {
con.query("SELECT * FROM customers", function(err, rows) {
if (err) {
console.log(err);
reject(err);
} else {
console.log('Found records : ' + rows.length);
resolve(rows);
}
});
});
});
}
module.exports.getItemData = getItemData;
这就是它的名称:
app.listen(port, function () {
console.log('Api server is listening on port '+ port);
// Call the async function
(async () => {
let result = await driver.getItemData();
console.log(result);
)();
});
promise中的console.log起作用。但函数外部的console.log返回未定义。
知道原因吗?有两个问题:
- 您的函数没有返回任何内容,那么为什么要定义
result
- 我怀疑
不是异步函数。您将异步函数作为回调传递,但这不会使函数本身异步。因此,您的getConnection()
什么也不做wait
Promise
中,并按如下方式返回:
async function getItemData() {
return new Promise((resolve, reject)=> {
pool.getConnection(function(err, con) {
if (err) return reject(err);
con.query("SELECT * FROM customers", function(err, rows) {
if (err) {
console.log(err);
reject(err);
} else {
console.log('Found records : ' + rows.length);
resolve(rows);
}
});
});
});
}
module.exports.getItemData = getItemData;
同样在您的另一个文件中,我只需使整个函数异步,那么您就不需要那个难看的包装器:
app.listen(port, async () => {
console.log('Api server is listening on port '+ port);
let result = await driver.getItemData();
console.log(result);
});