我試圖簡化代碼,但是在這裏我向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