如何推迟一个方法,直到另一个方法完成,javascript?

时间:2016-05-16 04:53:56

标签: javascript xmlhttprequest

我目前正在使用口袋妖怪api为学校开展一个项目,该项目将显示进化宠物小精灵所需的信息(请注意,我对javascript和HTML完全不了解。) 链接:http://pokeapi.co/docsv2/
该网站将询问用户名称,该名称将用于获取我正在寻找的主要信息的网址。
例如:如果有人进入皮卡丘,程序将请求皮卡丘的对象,其中包含皮卡丘进化链的网址,该网址将为网站提供主要信息。 目前代码如下所示:

var pokemon = new XMLHttpRequest();
var name = prompt("Whats the name of the pokemon you have?").toLowerCase();
var url = "http://pokeapi.co/api/v2/pokemon-species/" + name;
var url2;


pokemon.onreadystatechange = function(){
    if(pokemon.readyState == 4 && pokemon.status == 200){
        var myArr = JSON.parse(pokemon.responseText);
        var url2 = myArr.evolution_chain; 

    }
}
pokemon2.onreadystatechange = function() {
    if (pokemon2.readyState == 4 && pokemon2.status == 200) {
        var myArr2 = JSON.parse(pokemon2.responseText);
        console.log(myArr2.chain.species.name);
    }
}
var pokemon2 = new XMLHttpRequest();
pokemon2.open("GET", url2, true).done(onreadystatechange);
pokemon2.send();

pokemon.open("GET", url, true);
pokemon.send();    

然而程序不起作用,因为获取是在同一时间发生的,并且pokemon2应该只在pokemon完成之后被调用,因为它获得了pokemon2的实际url。
有谁知道如何才能做到这一点?
非常感谢! :)

1 个答案:

答案 0 :(得分:1)

pokemon2完成后,您可以致电pokemon

pokemon.onreadystatechange = function(){
    if(pokemon.readyState == 4 && pokemon.status == 200){
        var myArr = JSON.parse(pokemon.responseText);
        var url2 = myArr.evolution_chain; 

        // Call pokemon2 here
        var pokemon2 = new XMLHttpRequest();
        pokemon2.open("GET", url2, true);
        pokemon2.send();

    }
}