问题描述
问题出现的环境背景及自己尝试过哪些方法
需要是这样的,我从前端发送了用户和密码到后端addUser接口注册用户密码。注册成功之后返回一个token,也就是注册及登录。后端数据库采用的mongdb、框架为koa。现在遇到了一个问题:
我想在注册成功之后获取随机数token,但是在let token=await userInformation1.save()这一行。token一直为undefined。看了结果,显示一直是先执行的console.log('外result', result),再执行的保存语句。但是await就是用来暂停等待右侧函数执行结果的啊。
我打印出了else中返回值result的typeof类型为String,就是await等的结果是string,这样说就可以直接赋值给token了啊,但为什么还是先执行下面的语句呢?
相关代码
const addUser = async (ctx) => {//注册添加用户,并返回token直接登录。
var username = ctx.request.query.username;
let password = jsencrypt.decrypt(ctx.request.query.password);
let userInformation1 = new userInformation(
{
name: username,
password: password
});
let token= await userInformation1.save(async function (err) {
if (err) {
var result = err;
return result;
}
else {
console.log(ctx.request.query.username);
var result = random(8, { letters: false });
console.log('result' + result)
console.log("添加新用户成功" + username, password)
return result
}
});
console.log('外result', token)
ctx.response.body = {
token
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
现在的代码给我的感觉是await没起暂停的效果,还是先运行console.log('外result', token)这句代码。
现在结果如下(以用户名admin6和密码123456为例):
''
外result undefined
admin6
token08591194
添加新用户成功admin6 123456
''
已被困扰了一下午,重新看了看回调的书,但还是没有问题的头绪。诚恳希望各位指点!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…