javascript - JS 异步函数返回未定义,尽管在异步函数内调用它

标签 javascript node.js express asynchronous async-await

我正在使用nodeJs Express,并且我有一个在另一个函数中使用的异步函数。

这是我的代码:

/* get user info */
const getUserInfo = async (req) => {
    let userID = req.cookies.userId;
    if(!userID) return null;
    await connection.query('SELECT * FROM users WHERE id = ' + userID,
        function (err, rows, fields) {
            if (err) throw err
            // if user not found
            if (rows.length === 0) {
                return null;
            }
            // if user found
            else {
                return rows[0];
            }
        });
}
/* display dashboard page */
router.get("/", async function (req, res, next) {
    let userInfo = await getUserInfo(req);

    console.log(userInfo) // It's result is undefined


    if (userInfo) {
        res.render('dashboard/profile', {
            fullName: userInfo.fname + " " + userInfo.lname,
            email: userInfo.email,
            phone: userInfo.phone,
        });
    }
    else {
        res.render('authentication/register', {
            title: 'ثبت نام',
        });
    }

});

如何解决这个问题?我需要 userInfo 给我返回一些数据。

最佳答案

await 仅当右侧的值是一个 promise 时才有用。

connection.query 正在接受回调函数,这意味着它不会返回 promise 。

您需要:


您还需要 getUserInfo 拥有自己的 return 语句。

关于javascript - JS 异步函数返回未定义,尽管在异步函数内调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72075348/

相关文章:

javascript - Mongoose Async 查找所有内容并更新每个内容

javascript - Node.js 向客户端发送文件

node.js - 为什么node express中的req.session中会有cookie?

javascript - Chrome 错误?内容无法正确呈现多列

javascript - Angular *ngFor "id"标签生成不正确, `mat-button-toggle`

javascript - 使用 Chrome 扩展捕获并修改来自 Facebook 的 XHR 请求

javascript - 在 Nodejs 中解析 gzip 流

node.js - 从架构生成静态 API 文档?

node.js - 使用express.js 调用函数并传递回调

javascript - 传单标记聚类