Ordine de executie cu jQuery-AJAX

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
Marius
Mesaje: 60

Ordine de executie cu jQuery-AJAX

Am acest cod (ajax este asincron):

Cod: Selectaţi tot

function echoHello(){
  return $.ajax({
    //this will return "hello";
  });
}

function echoWorld(){
  return "world";
}

$.when(echoHello()).done(function(response){
  console.log(response);
});

console.log(echoWorld());
Care afiseaza "world" și "hello" (în această ordine). Dar, din ordinea în care funcțiile sunt apelate, ar trebui să afișeze "hello" și "world".
De ce raspunsul din funcția ajax este afișat după, desi este apelata prima?

MarPlo Mesaje: 4343
Ajax face un apel către serverul web și este asincron. Nu știi cât va dura pana la raspuns. Este la fel ca:

Cod: Selectaţi tot

setTimeout(_ => { console.log('hello'); }, 0);
console.log('world');
// output: world hello
'world' va fi afișat primul, deoarece funcția asincron (cu setTimeout()) rulează după blocul direct, chiar dacă timpul este setat la 0.

Subiecte similare