javascript - async如此使用可以嗎?
問題描述
最近看了一些文章開始使用async處理異步代碼,使用著比以前的異步回調好用的多,可是發(fā)現(xiàn)我的書寫方法好像有問題,貼出來,大家?guī)臀抑刚幌?...
(async function(){ let username = req.body.username; let password = req.body.password; // 查找當前用戶名是否已經(jīng)注冊(返回值為數(shù)組,沒有結果則為空數(shù)組,長度為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(’注冊成功’); })();
先不管寫的邏輯了,就是這種調用方法對嗎?總感覺需要寫一個立即執(zhí)行函數(shù)好怪.....
問題解答
回答1:如果沒有聲明該匿名函數(shù)為async,就不覺的這種寫法奇怪。由于該匿名函數(shù)中使用了await調用了另一個函數(shù),所以必須聲明為async,否則編譯報錯。可以直接像樓主寫的這樣立即執(zhí)行。不過更建議給該匿名函數(shù)聲明一個函數(shù)名,異步調用方式調用該函數(shù)。
回答2:多用try catch,另外不是很清楚你這里為什么要包一個立即執(zhí)行函數(shù)。給async的函數(shù)定義名稱。后續(xù)不就可以自定義調用了
回答3:一般這么用 是沒問題的。async函數(shù)用await調用時,從主函數(shù)程立即返回,等async函數(shù)結束時,再繼續(xù)執(zhí)行主函數(shù)。 如果不用await, 主函數(shù)會執(zhí)行完畢。同時async函數(shù)會異步的執(zhí)行。
相關文章:
1. 如何設置一個無限循環(huán)并打破它。(Java線程)2. php對mysql提取數(shù)據(jù)那種速度更快3. shell - mysql更新錯誤4. DADB.class.php文件的代碼怎么寫5. 網(wǎng)頁爬蟲 - 如何使用使用java抓取信息并制作一個排名系統(tǒng)?6. macos - 如何徹底刪除mac自帶的apache和php7. javascript - immutable配合react提升性能?8. python小白 自學看書遇到看不懂的地方9. mysql - 在log日志中已知用戶的某一步操作,如何獲取其上一步操作?10. javascript - sublime快鍵鍵問題

網(wǎng)公網(wǎng)安備