javascript - AngularJS $http.get razlika između then i success callback


Želio bih razumjeti razliku između then callbacka i success callbacka kada se pozivaju preko HTTP GET. Kada koristim then callback, vraća podatke, ali sa success callbackom ne vraća. Ispod je kod

Zatim povratni poziv

$http.get(url).
  then(function(response) {
     response.data.data;});

Poziv za uspjeh

$http.get(url).
   success(function(response) {
     response.data;});

Odgovor #1

Čini se da je vaš problem oko ovoga:

$http.get('/someUrl').success(function(data, status, headers, config) {

to je drugačiji povrat od then,

metoda then za registraciju povratnih poziva, a ti povratni pozivi primit će jedan argument - objekt koji predstavlja odgovor

Drugim riječima, trebali biste ovo raditi:

$http.get(...).success(function(data){ console.log(data) })
$http.get(...).then(function(response){ console.log(response.data) })

I naravno razlike u povezivanju, ali čini se da nisu povezane s vašim problemom:

then()

Ako povežete then(), povratni pozivi će se izvršavati uzastopno nakon što svaki završi, jer svaki put vraća novi objekt obećanja u lancu

success() (zastarjelo* zajedno s error())

Ako povežete success() pozive, povratne funkcije će se izvršavati paralelno, jer vraća izvorni objekt obećanja

*success i error su zastarjeli, pogledajte odjeljak Obavijest o zastarijevanju u $http dokumentaciji

Odgovor #2

možete koristiti bilo koji od .then ili .success, a kod povratnog poziva ovisi o metodi koju koristite.

.then() će imati dva argumenta: prvi je rukovatelj uspjehom, a drugi je rukovatelj pogreškom. Rukovatelj uspjehom unutar then() može se napisati na drugi način, naziva se .success. Glavna razlika između rukovatelja uspjehom unutar then() i .success funkcije je u tome što .success ima 4 argumenta (data, status, headers, config), dok rukovatelj uspjehom u then() ima samo jedan argument koji sadrži (data, status, headers, config) ugrađene u taj jedan argument, ali možete mu pristupiti na primjer kao (response.data, response.status itd...).