Menurut AngularJS doc , panggilan untuk $http
mengembalikan yang berikut:
Mengembalikan objek janji dengan metode standar lalu dan dua metode spesifik http: sukses dan kesalahan . The kemudian Metode membutuhkan dua argumen yang sukses dan error callback yang akan dipanggil dengan objek respon. Metode keberhasilan dan kesalahan mengambil argumen tunggal - fungsi yang akan dipanggil ketika permintaan berhasil atau gagal masing-masing. Argumen yang diteruskan ke fungsi-fungsi ini adalah representasi destruktif dari objek respons yang diteruskan ke metode saat itu.
Selain dari fakta bahwa response
objek dirusak dalam satu kasus, saya tidak mendapatkan perbedaan di antara keduanya
- keberhasilan / kesalahan callback disahkan untuk diteruskan sebagai argumen
promise.then
- callback disahkan sebagai argumen untuk
promise.success
/promise.error
metode janji
Apakah ada? Apa gunanya dua cara berbeda ini untuk menyampaikan panggilan balik yang tampaknya identik?
then
callback mengambil satu argumen - respon - sementarasuccess
danerror
mengambil masing-masing komponen respon sebagai arguments--data
,status
,header
, danconfig
..success()
metode mengembalikan objek janji $ http asli, karena rantai$http(...).success(...).error(...)
dimungkinkan. Jika, sepertinya masuk akal, kebalikannya$http(...).error(...).success(...)
juga mungkin, maka.error()
juga harus mengembalikan objek janji asli. Perbedaan yang membedakan.then()
adalah bahwa ia mengembalikan janji baru .promise.success = function(fn) { promise.then(function(response) { fn(response.data, response.status, response.headers, config); }); return promise; };
success
sudah usang. Dari docs.angularjs.org/api/ng/service/$http#deprecation-noticeThe $http legacy promise methods success and error have been deprecated. Use the standard then method instead. If $httpProvider.useLegacyPromiseExtensions is set to false then these methods will throw $http/legacy error.
Sudah ada beberapa jawaban bagus di sini. Tapi ada baiknya untuk membawa pulang perbedaan dalam paralelisme yang ditawarkan:
success()
mengembalikan janji semulathen()
mengembalikan janji baruPerbedaannya adalah
then()
drive operasi berurutan, karena setiap panggilan mengembalikan janji baru.$http.get()
seqFunc1()
seqFunc2()
success()
mendorong operasi paralel, karena penangan dirantai dengan janji yang sama.$http.get()
parFunc1()
,parFunc2()
secara paralelsumber
then
hasil tercapai dalamsuccess
danerror
metode menghilang. Juga, untuk respons kesalahan http (mis. 404)then
in pertamahttp.then(ok, err).then(ok, err)
akan diteruskan keerr
handler tetapi yang berikut akan masuk keok
handler. Pada dasarnyahttp.success().error().success().error()
adalah rantai tetapi janji $ q sangat berbeda karena mereka semua tentang janji dan urutan penanganan secara khusus (dan bukan penanganan permintaan http). Saya kesulitan memahami hal ini sampai saya mencermati.success
danerror
bukan API normal dari janji, mereka melesat ke nilai kembali $ http ().success
akan dieksekusi setelah yang pertama dieksekusi tetapi sebelum janji apa pun kembali dari itu diselesaikan sedangkan yang keduathen
akan menunggu. Jika Anda tidak mengembalikan janji maka keduanya berperilaku sama.Beberapa contoh kode untuk permintaan GET sederhana. Mungkin ini membantu memahami perbedaannya. Menggunakan
then
:Menggunakan
success
/error
:sumber
data,status,header,config
hanya dengan mengembalikanresponse
?.then () dapat diputus-putus dan akan menunggu sebelumnya .then () diselesaikan.
.success () dan .error () dapat dirantai, tetapi mereka semua akan menyala sekaligus (jadi tidak banyak yang menunjukkan hal itu)
.success () dan .error () hanya bagus untuk panggilan sederhana (pembuat mudah):
jadi Anda tidak perlu mengetik ini:
Tetapi secara umum saya menangani semua kesalahan dengan .catch ():
Jika Anda perlu mendukung <= IE8 kemudian tulis .catch () dan .finally () seperti ini (metode yang dicadangkan di IE):
Contoh kerja:
Ini adalah sesuatu yang saya tulis dalam format yang lebih kode untuk menyegarkan ingatan saya tentang bagaimana semuanya berjalan dengan penanganan kesalahan dll
http://jsfiddle.net/nalberg/v95tekz2/
sumber
Hanya untuk penyelesaian, berikut adalah contoh kode yang menunjukkan perbedaan:
sukses \ kesalahan:
kemudian:
sumber
Pemberitahuan Resmi: keberhasilan dan kesalahan telah ditinggalkan, silakan gunakan metode standar maka sebagai gantinya.
tautan: https://code.angularjs.org/1.5.7/docs/api/ng/service/$http
tangkapan layar: melihat tangkapan layar
sumber