javascript - async如此使用可以嗎?
問題描述
最近看了一些文章開始使用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(’注冊成功’); })();
先不管寫的邏輯了,就是這種調用方法對嗎?總感覺需要寫一個立即執行函數好怪.....
問題解答
回答1:如果沒有聲明該匿名函數為async,就不覺的這種寫法奇怪。由于該匿名函數中使用了await調用了另一個函數,所以必須聲明為async,否則編譯報錯。可以直接像樓主寫的這樣立即執行。不過更建議給該匿名函數聲明一個函數名,異步調用方式調用該函數。
回答2:多用try catch,另外不是很清楚你這里為什么要包一個立即執行函數。給async的函數定義名稱。后續不就可以自定義調用了
回答3:一般這么用 是沒問題的。async函數用await調用時,從主函數程立即返回,等async函數結束時,再繼續執行主函數。 如果不用await, 主函數會執行完畢。同時async函數會異步的執行。
相關文章:
1. 如何解決docker宿主機無法訪問容器中的服務?2. 前端 - CSS3 box-shadow如何設置,或者用什么方法可以產生圖中這樣陰影的效果。3. html - css 如何讓文字標題顯示在邊框上?4. node.js - vue-cll+sass 樣式不出來 已經npm install sass、 sass-loader了5. docker 下面創建的IMAGE 他們的 ID 一樣?這個是怎么回事????6. 在應用配置文件 app.php 中找不到’route_check_cache’配置項7. html按鍵開關如何提交我想需要的值到數據庫8. html5 - 微信開發的時候老是報這樣的錯誤errmsg config invalid signature9. vim中編輯HTML文件時換行不能縮進10. HTML5中怎么判斷用戶是否正在瀏覽頁面?
