表达异步/等待返回未定义

时间:2020-07-03 15:36:17

标签: javascript express async-await

我正在开发一个快速应用程序,并尝试在我的路线中使用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
    })
  }

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

获取认证

发送电子邮件example@outlook.com

user_db未定义

RESULT 

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

2 个答案:

答案 0 :(得分:2)

使用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;
  }

答案 1 :(得分:0)

等待,直到承诺解决。

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

因此,要使其工作,要么向您的findOneUser函数添加async {向函数添加async将返回包装在promise中的响应},要么在同一函数内创建一个promise,然后返回包装在promise中的响应。

相关问题