最近看了一些文章開始使用async處理異步代碼,使用著比以前的異步回調好用的多,可是發現我的書寫方法好像有問題,貼出來,大家幫我指正一下....
(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('注册成功');
})();
先不管寫的邏輯了,就是這種呼叫方法對嗎?總感覺需要寫一個立即執行函數好怪.....
伊谢尔伦2017-06-30 10:00:02
如果沒有聲明該匿名函數為async,就不覺的這種寫法奇怪。由於在該匿名函數中使用了await呼叫了另一個函數,所以必須宣告為async,否則編譯報錯。可以直接像樓主寫的這樣立即執行。不過更建議給該匿名函數宣告一個函數名,非同步呼叫方式呼叫該函數。
怪我咯2017-06-30 10:00:02
一般這麼用 是沒問題的。 async函數用await呼叫時,從主函數程立即返回,等async函數結束時,再繼續執行主函數。
如果不用await, 主函數會執行完畢。同時async函數會異步的執行。