Apakah ada cara untuk melakukan panggilan sinkron dengan AngularJS?
Dokumentasi AngularJS tidak terlalu eksplisit atau luas untuk mencari tahu beberapa hal dasar.
PADA LAYANAN:
myService.getByID = function (id) {
var retval = null;
$http({
url: "/CO/api/products/" + id,
method: "GET"
}).success(function (data, status, headers, config) {
retval = data.Data;
});
return retval;
}
Jawaban:
Tidak saat ini. Jika Anda melihat kode sumber (mulai saat ini Oktober 2012) , Anda akan melihat bahwa panggilan ke XHR open sebenarnya dikodekan keras menjadi asinkron (parameter ketiga benar):
Anda harus menulis layanan Anda sendiri yang melakukan panggilan sinkron. Biasanya itu bukan sesuatu yang biasanya ingin Anda lakukan karena sifat eksekusi JavaScript yang pada akhirnya akan memblokir semua yang lain.
... tapi .. jika memblokir semua hal lain sebenarnya diinginkan, mungkin Anda harus melihat ke dalam janji dan layanan $ q . Ini memungkinkan Anda untuk menunggu hingga serangkaian tindakan asinkron dilakukan, dan kemudian menjalankan sesuatu setelah semuanya selesai. Saya tidak tahu apa itu use case Anda, tapi itu mungkin layak untuk dilihat.
Di luar itu, jika Anda akan memutar sendiri, informasi lebih lanjut tentang cara membuat panggilan ajax sinkron dan asinkron dapat ditemukan di sini .
Saya harap itu membantu.
sumber
.then(callback)
. sesuatu seperti:doSomething(); $http.get('/a/thing').then(doEverythingElse);
.Saya telah bekerja dengan pabrik yang terintegrasi dengan google maps autocomplete dan janji dibuat, saya harap Anda melayani.
http://jsfiddle.net/the_pianist2/vL9nkfe3/1/
Anda hanya perlu mengganti autocompleteService dengan permintaan ini dengan $ http incuida sebelum pabrik.
dan permintaan $ http dengan
pertanyaannya adalah:
ketika Anda melakukannya dengan baik dan permintaan:
ketika ada kesalahan, dan kemudian:
sumber
sumber
Saya baru-baru ini mengalami situasi di mana saya ingin membuat panggilan $ http dipicu oleh reload halaman. Solusi yang saya gunakan:
sumber
Inilah cara Anda dapat melakukannya secara tidak sinkron dan mengelola hal-hal seperti biasa. Semuanya masih dibagikan. Anda mendapatkan referensi ke objek yang ingin Anda perbarui. Setiap kali Anda memperbarui itu di layanan Anda, itu diperbarui secara global tanpa harus menonton atau mengembalikan janji. Ini sangat bagus karena Anda dapat memperbarui objek yang mendasarinya dari dalam layanan tanpa harus mengulang kembali. Menggunakan Angular sebagaimana seharusnya digunakan. Saya pikir itu mungkin ide yang buruk untuk membuat $ http.get / post yang sinkron. Anda akan mendapatkan keterlambatan nyata dalam skrip.
Dan di suatu tempat di tampilan:
sumber
Karena sinkronisasi XHR sedang tidak digunakan, sebaiknya jangan mengandalkan itu. Jika Anda perlu melakukan permintaan POST sinkronisasi, Anda dapat menggunakan pembantu berikut di dalam layanan untuk mensimulasikan posting formulir.
Ini berfungsi dengan membuat formulir dengan input tersembunyi yang diposting ke URL yang ditentukan.
Ubah sesuai kebutuhan untuk kebutuhan Anda.
sumber
Bagaimana dengan membungkus panggilan Anda dengan
Promise.all()
metode yaituPromise.all([$http.get(url).then(function(result){....}, function(error){....}])
Menurut MDN
sumber