回调值返回未定义

时间:2019-07-10 12:25:51

标签: javascript node.js

每当我尝试从函数中获取返回值时,它都会返回未定义的值。

尝试回调, 尝试异步

let express = require('express');
let fs = require('fs');
let router = express();
let mysql = require('mysql');
const session = require('express-session');

router.use(session({
    secret: 'something random.exe',
    resave: false,
    saveUninitialized: true,
    cookie: {
        expires: new Date(Date.now() + 7600000),
        maxAge: new Date(Date.now() + 7600000),
    }
}));

async function logins (username, password) {
    mysql.createQuery("SELECT * FROM Users WHERE username = ?", [username], (err, rows) => {
        return "test";
    })
}

module.exports = {
    login: async (request, response, username, password) => {
        logins("username", "password", (getResponse) => {
            return console.log(getResponse);
        })
    }
};

控制台始终返回未定义。

2 个答案:

答案 0 :(得分:4)

调用logins时会传递三个参数:

  1. “用户名”
  2. “密码”
  3. 一个功能

看看logins的定义:

async function logins (username, password) {

它只对前两个两个参数起作用。

您的回调函数永远不会被使用。

重写logins来调用它。


还请注意,您已将其标记为async,但没有await兑现任何承诺…所以这可能是一个错误。

答案 1 :(得分:0)

您似乎不了解async/await关键字。当您尝试调用没有关键字await的任何函数时,就会发生这种类型的问题。

格式错误

 const userUtils = {};

 userUtils.login = async () => {
 try {
     // Your business logic 
 } catch (err) {
     console.log(err);
     throw err;
 }
};

userUtils.test = async () => {
    try {
        const result = userUtils.login();
        console.log(result); // It will undefined
    } catch (err) {
        console.log(err);
        throw err;
    }
};

userUtils.test();

在上面的代码中,您将获得undefined作为结果变量。

更正

const result = await userUtils.login();

在调用任何承诺时,别忘了写一个关键字await

注意:您仅在需要处理任何承诺时才能使用async/await。它不能直接在回调函数上运行

错误的格式[等待回调]

userUtils.test = async () => {
    try {
        const result = await userUtils.login(args, (err, data) => {
            if (err) {
                console.log(err);
                throw err;
            }
            return data;
        });
        console.log(result); // It will undefined
    } catch (err) {
        console.log(err);
        throw err;
    }
};

我希望它会有所帮助。快乐编码:)