私はコードを単純化しようとしましたが、ここで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);
};
なぜ約束を使用しないのですか?そうすれば、それは本当に非同期になります。 – Baruch
@Baruch:これは本当に非同期です。 –
フローを処理するコールバックとして関数をチェーンする必要があります – Aethyn