[英]Can't resolve a promise on exported async function NodeJS
所以我在導出異步 function 時遇到了這個問題:
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 可以正常工作。 但是 function 之外的 console.log 返回 undefined。 知道為什么嗎?
兩個問題:
result
呢?getConnection()
不是異步 function。 您正在傳遞異步 function 作為回調,但這不會使 function 本身異步。 因此,您的await
什么也不做。 您可以嘗試將整個 function 包裝在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;
同樣在您的其他文件中,我只會使整個 function 異步,那么您不需要那個丑陋的包裝器:
app.listen(port, async () => {
console.log('Api server is listening on port '+ port);
let result = await driver.getItemData();
console.log(result);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.