猿问

我不明白为什么我的函数总是返回 undefined?

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


Strat 脚本代码


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"}


森栏
浏览 257回答 1
1回答

jeck猫

我相信这是因为 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)本质上,这个想法是返回一个 Promise,它可以解决或拒绝。一旦你的承诺得到解决,你就可以使用它的结果来执行你需要的任何操作。这就是 JavaScript 异步的烦恼。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答