koa2使用await之后ctx.body无法返回内容了

koa2链接数据库的时候写了如下两个方法:

insertUser: (account, password) => new Promise((resolve) => {
    connection.query(command.insertUser, [account, password], (err, ret) => {
      if(err) {
        console.log('[insertUser error!]:', err);
        return reject(err);
      }
      resolve(ret);
    });
  }),
  selectUser: account => new Promise((resolve) => {
    connection.query(command.selectUser, [account], (err, ret) => {
      if(err) {
        console.log('[selectUser error!]:', err);
        return reject(err);
      }
      resolve(ret);
    });
  })

但是在处理函数中使用await获取mysql中的数据之后,数据可以获取到,但是ctx.body无法赋值了,前端也一直返回404

try {
  result = await Mysql.selectUser(register_user_name);
} catch(e) {
  console.log('[select user error]:', e);
}
if(result && result[0]) {
  ctx.body = {
    code: 102,
    data: {
      errMessage: '用户已存在'
    }
  };
  return;
}

不知道哪里出了问题,result数据是可以获取到的,if语句也正常执行了,只有ctx.body无法执行,node也没有报错,只有前端一直返回404。
换成await Promise.resolve(10)也是一样后面的ctx.body无法执行,但是await Promsie.reject(10)的话是可以走到catch里面的。
数据库都可以正常读写,就是无法返回数据。
nodejs版本是8.1.4,在await之前执行ctx.body都是可以正常运行的,之后就不可以了。
求大神帮忙看看哪里出了问题

阅读 8.6k
1 个回答

await Promise.resolve(10) 后面的 ctx.body 无法执行是正常的,因为 result && result[0] 这个判断中的 result[0] 判 false,所以进不到 if 里面。

估计原代码中也是判断那里出了问题,在 if 之前加句话调试下

console.log(result, result[0])

另外,建议加个 else 分支处理正确的情况(或者在 if () {} 之后,因为 if 分支中 return 了)。

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