Heim > Fragen und Antworten > Hauptteil
Ich habe kürzlich einige Artikel gelesen und begonnen, asynchronen Code zu verwenden. Er ist viel einfacher zu verwenden als die vorherigen asynchronen Rückrufe. Ich habe jedoch festgestellt, dass es ein Problem mit meiner Schreibmethode gibt Hilf mir, es zu korrigieren....
(async function(){
let username = req.body.username;
let password = req.body.password;
// 查找当前用户名是否已经注册(返回值为数组,没有结果则为空数组,长度为0)
let userIsRegisted = await user.findByName(username);
// 因为用户名的唯一性,可以使用==1或者!=0两种方式判断
if(userIsRegisted.length!=0){
res.send('当前用户已注册');
return;
}
// 密码加密
let hashPassword = crypto.createHash('sha1').update(password).digest('hex');
let obj = {
username:username,
password:hashPassword
}
// 添加新用户
await user.create(obj);
// 设置session
req.session.username=username;
req.session.loged = true;
res.send('注册成功');
})();
Ich vergesse die Logik des Schreibens, das ist die aufrufende Methode, oder? Es fühlt sich immer seltsam an, dass ich eine Funktion zur sofortigen Ausführung schreiben muss ...
伊谢尔伦2017-06-30 10:00:02
如果没有声明该匿名函数为async,就不觉的这种写法奇怪。由于该匿名函数中使用了await调用了另一个函数,所以必须声明为async,否则编译报错。可以直接像楼主写的这样立即执行。不过更建议给该匿名函数声明一个函数名,异步调用方式调用该函数。
怪我咯2017-06-30 10:00:02
一般这么用 是没问题的。async函数用await调用时,从主函数程立即返回,等async函数结束时,再继续执行主函数。
如果不用await, 主函数会执行完毕。同时async函数会异步的执行。