【发布时间】:2019-06-12 20:35:28
【问题描述】:
我对 NodeJS 还很陌生,正在尝试理解 async、await 和 Promise。如果我将 resolve() 置于“con.query”的回调范围之外(仍在新的 Promise 范围内),则 likes 变量未定义。仅当 resolve() 在回调中时才会填充它。为什么会这样?示例:
//WORKS
async function findLikes(q, req, res){
var likes_q = `SELECT * FROM PublicStoryLike WHERE authorId =
${req.body.token_id}`;
var likes;
var lookup = {};
//const query = util.promisify(con.query).bind(con);
const query = new Promise((resolve, reject) => {
con.query(likes_q, (err, result) => {
likes = JSON.stringify(result);
resolve(); //INSIDE con.query
});
})
//DOESN'T WORK
async function findLikes(q, req, res){
var likes_q = `SELECT * FROM PublicStoryLike WHERE authorId =
${req.body.token_id}`;
var likes;
var lookup = {};
//const query = util.promisify(con.query).bind(con);
const query = new Promise((resolve, reject) => {
con.query(likes_q, (err, result) => {
likes = JSON.stringify(result);
});
resolve(); //OUTSIDE con.query
})
【问题讨论】:
-
@mark
resolve在这两种情况下都在范围内。 -
谢谢@JonasWilms——我的错。编辑缩进以使其更清晰。
标签: javascript node.js asynchronous async-await