搜尋

首頁  >  問答  >  主體

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('注册成功');
 })();
    

先不管寫的邏輯了,就是這種呼叫方法對嗎?總感覺需要寫一個立即執行函數好怪.....

PHP中文网PHP中文网2694 天前670

全部回覆(3)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-06-30 10:00:02

    如果沒有聲明該匿名函數為async,就不覺的這種寫法奇怪。由於在該匿名函數中使用了await呼叫了另一個函數,所以必須宣告為async,否則編譯報錯。可以直接像樓主寫的這樣立即執行。不過更建議給該匿名函數宣告一個函數名,非同步呼叫方式呼叫該函數。

    回覆
    0
  • 迷茫

    迷茫2017-06-30 10:00:02

    多用try catch,另外不是很清楚你這裡為什麼要包一個立即執行函數。給async的函數定義名稱。後續不就可以自訂呼叫了

    回覆
    0
  • 怪我咯

    怪我咯2017-06-30 10:00:02

    一般這麼用 是沒問題的。 async函數用await呼叫時,從主函數程立即返回,等async函數結束時,再繼續執行主函數。
    如果不用await, 主函數會執行完畢。同時async函數會異步的執行。

    回覆
    0
  • 取消回覆