koa中ctx.body写在connection.query中无法返回数据到前端?

新手上路,请多包涵

最近在写一个koalogin,用的是MySQL数据库。今天遇到了一个完全不明白的问题,如下图
这是loginRouter, 我在if逻辑判断之前新建了一个变量var resultOuter, 其实这个resultOuter只是想把
userdbconnection.query(“SELECT password FROM user WHERE username=?”, [username], function(err, result)这里面返回的result带出function之外的,因为在userdbconnection.query(“SELECT password FROM user WHERE username=?”, [username], function(err, result){…}之中,我给ctx.body亦或是ctx.message赋值完全无法返回到前端,所以我想把这个result带出function,在外面做判定,然后再赋值给ctx.bodyctx.message,可是不管尝试了什么方法,这个result只要一离开function之外就变成了undefined,我测试了一下,因为异步的原因,在这一整个loginRouter执行的过程中,在遇到await userdbconnection.query(“SELECT password FROM user WHERE username=?”, [username], function(err, result)这一行的时候,并不会等它执行完毕,会先执行最下面的console.log(resultOuter)而此时,resultOuter=getPassword并没有执行,所以外面的resultOuterundefined,但是虽然我知道是这样,我查了好多办法让userdbconnection.query先执行,然后再执行console.log就是不行,各位有没有什么办法,可以让我把function里面的result传到外面去呢?或者是让userdbconnection.query先执行,然后再执行console.log

图片描述

阅读 3.5k
1 个回答

你用了 async await 代码不应该再用callback了吧

try{
  let result = userdbconnection.query(“SELECT password FROM user WHERE username=?”, [username]);
//todo  写原来callback里面的逻辑
}catche(error){

}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题