我不知道为什么我的函数总是返回未定义的?

时间:2019-07-24 01:44:32

标签: javascript jquery json

我将函数的返回值存储在变量中。该变量始终是未定义的。我不知道为什么,我希望新鲜的眼睛可以帮助我。

策略脚本代码

function getUserInfo(data){
    var params = {type:'userinfo',data:data};
    $.ajax({
        url: DOMAIN_NAME + "get.php",
        dataType: 'text',
        type: 'post',
        contentType: 'application/x-www-form-urlencoded',
        data: params,
        success: function( data, textStatus, jQxhr ){
            var response = JSON.parse(data);
            if (response.result == "success"){
                console.log(response.data); //Correct Data
                return response.data;
            }else{
                alert(response.data);
                return false;
            }
        },
        error: function( jqXhr, textStatus, errorThrown ){
            alert("Something went wrong, try again later.");
            return false;
        }
    });
}

此处,调用函数getUserInfo()

console.log(getUserInfo(window.localStorage.getItem("auth"))); //Undefined??
var userInfo = getUserInfo(window.localStorage.getItem("auth"));
console.log(userInfo); //Undefined??

如果与get.php返回的json相关,则类似

{"result":"success","data":"FOOBAR"}

1 个答案:

答案 0 :(得分:0)

我相信这是因为JavaScript是异步的。您应该做的是返回一个Promise。这是我使用MySQL的项目中的代码示例。原理应该相同。

async function getUserInformation(id) {
    let query = `SELECT full_name,description,link,htb FROM users WHERE discord_id = ${id}`;
    return new Promise((resolve, reject) => {
      pool.query(query, function (err, result) {
        if (err) throw err;
        resolve(result)
      })
    })
  }

然后,要使用此功能的结果,请执行

    getUserInformation(id).then((result)=>
    // Do operations with result here
    ).catch(console.error)

从本质上讲,这个想法是返回一个可以解决或拒绝的承诺。兑现诺言后,您便可以使用从中得到的结果执行所需的任何操作。这就是JavaScript异步的烦恼。