异步|无法获得我的异步运行承诺

时间:2019-07-01 21:06:35

标签: javascript express promise async-await

我当前正在编写一个登录服务器功能,我无法弄清楚为什么我所创建的姿势没有被调用

我使用mongodb和mongoose作为后端,并使用有效的User.findOne连接到后端。我不知道为什么Test和test2的底部console.log永远不会被解雇。

我对诺言和异步很陌生,我不知道自己缺少什么

class HandlerGenerator {
  login (req, res) {
      console.log('debguh1')
      let username = req.body.username;
      let password = req.body.password;
      let checkUsername = "";
      let checkPassword = "";

      var lData = {
          username: req.body.username,
          password: req.body.password
        };

      var myPromise = () => {
        return new Promise((resolve, reject) => {
          console.log('db2')
          User.findOne(lData , function(err, userLogin){
              if(err){
                console.log(err);
                return
              }
              console.log(userLogin)
              checkUsername = userLogin.username;
              checkPassword = userLogin.password;

            });
          });
        };

      var callMyPromise = async () => {
          var result = await (myPromise());
          // call code here
          console.log("Test1")
          resolve(result);
          //return result
        };

      callMyPromise().then(function(result) {
        console.log('Test2')
          res.json(result);
          });

  }
}

1 个答案:

答案 0 :(得分:1)

我猜您正在使用猫鼬进行查询,.exec()返回了一个承诺。 通过使您的登录方法异步,您现在可以等待响应。但是请确保将try等待包装在try catch块或HOF中,以处理错误/或找不到用户。

class HandlerGenerator {
  async login(req, res) {
    let { username, password } = req.body;
    let checkUsername = "";
    let checkPassword = "";

    var lData = {
      username
      password
    };

    try {
      const userData = await User.findOne(lData).exec();
      res.json(userData);
    } catch (e) {
      // do some error handling in here
    }
  }
}