[英]Nodejs: download a file into string via http, using async await syntax
[英]What is the syntax to using await and async in asynchronous functions using nodejs?
我正在嘗試在 nodejs 中創建一個基本 API 來對數據庫執行 CRUD 操作。 我不明白為什么結果未定義
exports.getPlaylist = async function (req, res) {
console.log('Recieved getPlaylist request');
result = await connection.executeQuery('SELECT * from Users');
res.status(200).send(result);
console.log(result); // Logs undefined
};
這是被調用並從數據庫中獲取數據的函數:
async executeQuery(query) {
connection.query(query, function (err, result) {
if (err) {
console.log('Error executing query: ' + err);
}
console.log(result); // logs correct data
return result;
});
}
您需要“承諾”您的回調。 (請參閱require('utils').promisify
)以了解應用於遵循 node.js 回調樣式 ( function(err,result){}
) 的函數的速記。
executeQuery(query) {
return new Promise((res, rej) => {
connection.query(query, function (err, result) {
if (err) {
console.log('Error executing query: ' + err);
rej(err)
} else {
console.log(result); // logs correct data
res(result);
}
});
});
}
現在在async
函數中你可以await executeQuery(query)
execute
不是 promise 基函數,您不能在回調函數上使用await
。
將execute
函數更改為promise
base
例子:
executeQuery(query) {
return new Promise( (resolve, reject) => {
connection.query(query, function (err, result) {
if (err) {
console.log('Error executing query: ' + err);
reject('Error executing query: ' + err);
}
console.log(result); // logs correct data
resolve(result);
});
});
}
在調用函數中添加 try catch
exports.getPlaylist = async function (req, res) {
console.log('Recieved getPlaylist request');
try{
result = await connection.executeQuery('SELECT * from Users');
res.status(200).send(result);
console.log(result); // Logs undefined
} catch(error) {
console.log(error)
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.