在使用express的节点js中async / await?

时间:2017-11-03 07:40:29

标签: node.js async-await

嗨,我是节点js的新手,我正在使用节点版本7.10来制作apis

我的控制器

  class SomeControllerClass {

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

 }

我正在分离DbHelper以使Controller变得简洁和干净,并且所有业务逻辑都将在DbHelper中编写。

User是db中的架构及其保存数据,但我不知道为什么我的控制器中出现了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 个答案:

答案 0 :(得分:2)

您忘记从函数中返回值。 Question == PFObject(className: "Question")期待一个承诺。

PFCloud.callFunctionInBackground("fetchQuestions", withParameters: parameters) { questions, error in
            if let questions = questions as? [Question] {
                completion?(questions, nil)
            } else {
                completion?(nil, error)
            }
        }

由于承诺因某些原因失败,您需要在await函数中使用SomeOtherFunction(userinfo) { return bcrypt.hash(userinfo.password, saltRounds).then(function(hash, err) { var user = new User(userinfo); user.password = hash; return user.save(); }); } / try

答案 1 :(得分: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();

    }
}