在Node.js中使用Express的async/await?

3

你好,我刚接触Node.js,我正在使用7.10版本的Node.js制作API。

我的控制器:

  class SomeControllerClass {

     async someFunction(req, req){
        var afterDBAction = await DbHelper.SomeOtherFunction(req.body)
         // afterDBAction is comming out undefined
     }

 }

我正在将DbHelper分离出来,使控制器变得更加简洁清晰,所有业务逻辑都将写在DbHelper中。

User是模式,它保存数据在数据库中,但我不知道为什么在我的控制器中会得到"undefined"。

class DbHelper {
  SomeOtherFunction(userinfo){
      var user = new User(userinfo);
      bcrypt.hash(userinfo.password, saltRounds).then(function(hash, err) { 
          user.password = hash;
          return user.save().then(function() {
              if (err)
                  return err;
              return user;
          })
      });
  }   
}
2个回答

2

你忘记从函数中返回值。 await 需要一个 promise。

SomeOtherFunction(userinfo) {
    return bcrypt.hash(userinfo.password, saltRounds).then(function(hash, err) { 
        var user = new User(userinfo);
        user.password = hash;
        return user.save();
    });
}

由于承诺可能因某些原因失败,因此您需要在async函数中的某个位置使用try/catch


现在我得到了 Promise { <pending> },我认为我必须解决它,但不知道在哪里? - ashwintastic
user.save(); 不会解析为用户对象吗?它会解析为什么? - Tomalak

2
你可以写异步函数来使你的代码更加简洁。
class DbHelper {
    async SomeOtherFunction(userinfo) {
        let hash = await bcrypt.hash(userinfo.password, saltRounds); 
        let user = new User(userinfo);
        user.password = hash;
        return user.save();

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接