我试图简化代码,但是在这里我向api发出请求,它一切正常,直到我尝试调用函数4中的函数5,它将接收到的数据由api转换为function2。JavaScript函数调用顺序不正确
有没有人知道如何阻止这种情况发生?
var xhr = new XMLHttpRequest();
var counter = 0;
window.onload = function() {
var add_button = document.getElementById('add_button');
add_button.addEventListener('click', function1);
var function1 = function() {
counter++;
xhr.addEventListener('load', function2);
var url = 'https://api.example.org/search';
console.log(url);
xhr.open("GET", url);
xhr.send();
};
var function2 = function() {
var data = JSON.parse(this.response);
console.log(data);
function3();
};
var function3 = function() {
for (var i in searchArray) {
var Url2 = 'https://api.example.org/search2';
xhr.open("GET", Url2);
xhr.addEventListener('load', function4);
xhr.send();
};
};
var function4 = function() {
var data2 = JSON.parse(this.response);
if (counter === 3) {
var url3 = 'https://api.example.org/search3';
xhr.open("GET", url3);
xhr.addEventListener('load', function5);
xhr.send();
};
};
var function5 = function() {
var data3 = JSON.parse(this.response);
};
为什么不使用Promise?这样它就会真正异步。 – Baruch
@Baruch:它已经是真正的异步了。 –
您需要链接函数作为回调来处理流程 – Aethyn