Javascript 为什么当我把一个变量记录到控制台时,我会得到输出,但当我返回它时,我会收到;“未定义”;

Javascript 为什么当我把一个变量记录到控制台时,我会得到输出,但当我返回它时,我会收到;“未定义”;,javascript,ajax,json,Javascript,Ajax,Json,我正在创建一个纯JavaScript模块,并尝试从API调用一些数据,这将成功完成。如果我将响应分配给一个变量,然后将其记录到控制台,那么我将看到预期的结果。但是,如果我返回它,那么我将收到未定义的。如果已经回答了,我表示歉意,但在浏览了一段时间后,我找不到问题的答案 我的代码如下: httpRequest.onload = function() { if(httpRequest.readyState === 4) {

我正在创建一个纯JavaScript模块,并尝试从API调用一些数据,这将成功完成。如果我将响应分配给一个变量,然后将其记录到控制台,那么我将看到预期的结果。但是,如果我返回它,那么我将收到未定义的。如果已经回答了,我表示歉意,但在浏览了一段时间后,我找不到问题的答案

我的代码如下:

                httpRequest.onload = function() {
                    if(httpRequest.readyState === 4) {
                        if (httpRequest.status === 200) {
                            response = JSON.parse(httpRequest.responseText);
                            console.log(response) // Returns data correctly
                            return response;
                        } else {
                        console.log("API call error");
                        }
                    }
                }
console.log(module.callAPI(query)); //returns undefined
上述代码返回到模块外的另一个函数,如下所示:

                httpRequest.onload = function() {
                    if(httpRequest.readyState === 4) {
                        if (httpRequest.status === 200) {
                            response = JSON.parse(httpRequest.responseText);
                            console.log(response) // Returns data correctly
                            return response;
                        } else {
                        console.log("API call error");
                        }
                    }
                }
console.log(module.callAPI(query)); //returns undefined
任何提示都将不胜感激


谢谢

您从
onload()
方法返回值,但尝试记录
callAPI()
方法的结果


onload()
是一个回调,一旦请求完成,它将被称为“将来的某个时候”。从中退回任何东西都没有多大意义。如果你分享你想要达到的目标,我们可以给你一些提示。如您的问题所示,从
onload()
登录控制台是100%合适的。

感谢您的回答,我对JavaScript相当陌生,因此您如何建议我返回响应对象?通常您从
onload()
本身执行操作,而不是返回值。由于回调是异步的,“返回值”通常不是您想要的。例如,使用ReceivedResponse(response)调用一些方法,如
UpdateUI将是合适的。啊,我明白了,谢谢!我通过创建一个方法来输出HTML中的数组,从而使它能够以这种方式工作,但我希望模块完全独立于网页,以便它只返回一个元素数组,您可以从模块外部操作您认为合适的方式。这有可能/应该这样做吗?