为什么这个变量没有在javascript中返回?

为什么这个变量没有在javascript中返回?,javascript,Javascript,我试图在我编写的函数中返回从这个XML请求获得的数据。但是,由于某些原因,该函数返回未定义的。我已经检查以确保请求从txt文件中获取数据,并且它是。如果我在尝试设置输出变量的地方输入console.log,则它具有正确的信息。我不知道为什么它不能返回那个变量 下面是函数: function localSource() { let output; let link = "questions/set0.txt" let request = new XMLH

我试图在我编写的函数中返回从这个XML请求获得的数据。但是,由于某些原因,该函数返回未定义的。我已经检查以确保请求从txt文件中获取数据,并且它是。如果我在尝试设置输出变量的地方输入console.log,则它具有正确的信息。我不知道为什么它不能返回那个变量

下面是函数:

function localSource() {
    let output;
    let link = "questions/set0.txt"
    let request = new XMLHttpRequest();
    request.open('GET', link, true);
    request.onload = function () {
        if (request.status >= 200 && request.status < 400) {
            output = JSON.parse(this.response);

        } else {
            console.log("ERROR: Unable to fetch new set");
        }
    }
    request.send();
    return output;
}
函数localSource(){
让输出;
let link=“questions/set0.txt”
let request=new XMLHttpRequest();
打开('GET',link,true);
request.onload=函数(){
如果(request.status>=200&&request.status<400){
output=JSON.parse(this.response);
}否则{
log(“错误:无法获取新集合”);
}
}
request.send();
返回输出;
}
我有一个类似的功能,从不同的网站获取数据。此函数用于将对象推送到输出数组。由于某种原因,这起作用并且返回了输出

这是一个有效的函数:

function remoteSource() {
    let output = [];
    let link = "https://www.randomtriviagenerator.com/questions?limit=256"
    let request = new XMLHttpRequest();
    request.open('GET', link, true);
    request.onload = function () {
        if (request.status >= 200 && request.status < 400) {
            let obj = JSON.parse(this.response);
            for (let i = 0; i < obj.length; i++) {
                let element = {
                    question: obj[i].question,
                    answer: obj[i].answer,
                    category: obj[i].categories[0]
                }
                output.push(element);
            }
        } else {
            console.log("ERROR: Unable to fetch new set");
        }
    }
    request.send();
    return output;
}
函数remoteSource(){
让输出=[];
让链接=”https://www.randomtriviagenerator.com/questions?limit=256"
let request=new XMLHttpRequest();
打开('GET',link,true);
request.onload=函数(){
如果(request.status>=200&&request.status<400){
让obj=JSON.parse(this.response);
for(设i=0;i
以下是输出(它不允许我嵌入):

这显示localSource函数不返回任何内容,只返回console.logging将要返回的数据。它还显示了按预期返回数组的remoteSource函数


任何帮助都将不胜感激

添加到
onload
的函数只有在从函数返回后才执行,这太晚了,就像onload函数运行之前一样,您的
输出
数组没有填充。处理这一问题的标准方法是使用承诺。但是,如果可以的话,我建议您查看fetchapi而不是XMLHTTPRequest,因为它本机使用承诺而不是回调。