【问题标题】:express async/await returning undefined表达异步/等待返回未定义
【发布时间】:2020-07-03 23:50:48
【问题描述】:

我正在开发一个快速应用程序并尝试在我的路线中使用 asyn/await。现在,在我看来,它似乎没有等待 findOneUser 调用返回,而是跳到下一行:

app.post ('/api/authenticate', async(req, res) => {
  console.log('GET TO AUTHENTICAE')
  const { email, password } = req.body;
  const user_db = await users.findOneUser( email );
  console.log("user_db", user_db)
  return user_db
});

 const findOneUser = (email) => {
    console.log("email", email)
     pool.query('SELECT * FROM users where email = $1', [email], (error, results) => {
      if (error) {
        throw error
      }
      console.log("RESULT", results.rows)
       results.rows
    })
  }

这是我在终端中的日志,您可以看到 user_db_log 显示在 RESULT 日志之前,但我对 async/await 的理解是 user_db 代码应该等待 user.findOneUser 方法运行:

去认证

电子邮件example@outlook.com

user_db未定义

RESULT 

[
  {
    id: 11,
    first_name: 'Test',
    last_name: 'User',
    email: 'testuser@test.com'
  }
]

【问题讨论】:

  • 在 findOneUser 中添加异步

标签: javascript express async-await


【解决方案1】:

使用Promiseasync , await 尝试这种方式

 app.post ('/api/authenticate', async(req, res) => {
      console.log('GET TO AUTHENTICATE')
      const { email, password } = req.body;
      const user_db = await users.findOneUser(email);
      console.log("user_db", user_db)
      return user_db;
    });


 const findOneUser = async (email) => {
        var myPromise = () => {
            return new Promise((resolve, reject) => {
                pool.query('SELECT * FROM users where email = $1', [email], (error, results)=> {
                    error ? reject(error) : resolve(results);
                });
            });
        }
        var result = await (myPromise());
        return result;
  }

【讨论】:

    【解决方案2】:

    Await 等到 promise 解决。

    但是您的 findOneUser 函数没有返回承诺,因此等待立即执行然后返回。

    因此,要使其正常工作,要么将 async{adding async to a function 返回包含在 Promise 中的响应} 添加到您的 findOneUser 函数中,要么在同一函数中创建一个 Promise,然后返回包含在 Promise 中的响应。

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 1970-01-01
      • 2022-11-06
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 2018-04-30
      • 2021-12-05
      相关资源
      最近更新 更多