【问题标题】:Async | Can not get my async promise to function异步 |无法让我的异步承诺发挥作用
【发布时间】:2019-11-12 12:16:14
【问题描述】:

我目前正在编写一个登录服务器函数,但我无法弄清楚为什么我所做的 posmise 没有被调用

我正在使用带有 mongoose 的 mongodb 作为后端,该后端使用有效的 User.findOne 连接。我无法弄清楚为什么 Test 和 test2 的底部 console.log 永远不会被解雇。

我对 Promise 和 async 很陌生,我不知道我缺少什么

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);
          });

  }
}

【问题讨论】:

  • 评论解析,取消评论返回。但也要注意 callMyPromise 是多余的,你可以直接调用 myPromise。
  • 你永远不会兑现你的第一个承诺。您需要在 User.findOne() 回调中的某处解决。
  • 声明所有这些只调用一次的函数有什么意义?

标签: javascript express promise async-await


【解决方案1】:

我猜你正在使用猫鼬进行查询,.exec() 正在返回一个承诺。 通过使您的登录方法异步,您现在可以等待响应。但请确保将 await 包装在 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
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2019-03-19
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多