为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森栏 2021-08-20 10:10:11
我将函数的返回值存储在变量中。该变量始终未定义。我不知道为什么,我希望新鲜的眼睛可以帮助我。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"}
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

我相信这是因为 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 异步的烦恼。


查看完整回答
反对 回复 2021-08-20
  • 1 回答
  • 0 关注
  • 256 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信