在调用函数中调用函数的返回值未定义

时间:2017-03-17 20:17:18

标签: javascript

我做了很多搜索并且感觉我的问题已经回答,但是我无法将可用的答案与我的特定情况相结合。这是我有史以来的第一个Javascript,我为几乎肯定会重复一个初学者问题而道歉,这个问题在非常相似的情况下可能得到了充分的回答。基本上,我不知道为什么fishDirector的var queryDir在调用fishTitle之后总是保持一个未定义的值。

function fishDirector() {

var dir = "";
var req = new XMLHttpRequest();

var URL = "https://netflixroulette.net/api/api.php?";
var queryTypeDir "director=";
var queryDir = fishTitle();
console.log(queryDir);
console.log(dir);

req.open('GET', URL + queryTypeDir + queryDir, true);
req.addEventListener("load", function() {
    var response = JSON.parse(req.responseText);

req.send(null);
});
}

上面我天真地试图在调用函数中定义var dir,由被调用函数fishTitle:

更新
function fishTitle() {

var req = new XMLHttpRequest();

var URL = "https://netflixroulette.net/api/api.php?";
var queryType = "title=";
var query = document.getElementById('form_search').value;


req.open('GET', URL + queryType + query, true);
req.addEventListener("load", function() {
    var response = JSON.parse(req.responseText);

    dir = dir + response.director;
    console.log(dir);
    return dir;
});
req.send(null);
return dir;
}

愚蠢的返回语句是一种无助的努力,让匿名函数让它的调用函数知道dir是什么,并将其返回给fishDirector,它叫fishTitle。我得到的印象是,一旦匿名函数终止,dir的值就会丢失,但如果是这样的话,我怎么把它从那里拿出来?

Dumbdumbdumb。告诉我。

1 个答案:

答案 0 :(得分:0)

这是因为它是异步的ajax请求。 Tḧat意味着您将请求放在不同的线程中,并且您的主线程继续执行。

所以你做var queryDir = fishTitle();并且它一直运行到最后,启动另一个执行线程并返回undefined。

稍后,当处理这个其他线程时,它可以设置dir值,但主要的执行流量已经完成。

阅读guest271314的答案,看看其中一种处理方式。教育自己关于ajax和异步编程,以提高这种理解。