Dalam bisnis yang sebenarnya, Anda sering perlu menunggu beberapa permintaan untuk menyelesaikan sebelum melanjutkan dengan langkah berikutnya. Tapi $ http di AngularJS tidak mendukung permintaan sinkron.
Solusi 1:
Salinan kode adalah sebagai berikut:
$ http.get ('url1'). Success (function (d1) {
$ http.get ('url2'). Success (function (d2) {
// Memproses logika
});
});
Solusi 2:
Metode dalam waktu itu akan dieksekusi secara berurutan.
Salinan kode adalah sebagai berikut:
var app = angular.module ('app', []);
app.controller ('promiseControl', function ($ scope, $ q, $ http) {
fungsi getjson (url) {
var ditangguhkan = $ q.defer ();
$ http.get (url)
.success (function (d) {
D = ParseInt (D);
Console.log (D);
Deferred.resolve (d);
});
return ditangguhkan.promise;
}
getjson ('json1.txt'). lalu (function () {
return getjson ('json2.txt');
}). Kemudian (function () {
return getjson ('json1.txt');
}). Kemudian (function () {
return getjson ('json2.txt');
}). Kemudian (fungsi (d) {
console.log ('end');
});
});
Solusi Tiga:
Parameter pertama dari metode $ q.all dapat berupa array (objek). Setelah semua konten dalam parameter pertama dieksekusi, metode dalam kemudian akan dieksekusi. Semua nilai pengembalian metode parameter pertama diteruskan sebagai array (objek).
Salinan kode adalah sebagai berikut:
var app = angular.module ('app', []);
app.controller ('promiseControl', function ($ scope, $ q, $ http) {
$ q.all ({first: $ http.get ('json1.txt'), kedua: $ http.get ('json2.txt')}). lalu (fungsi (arr) {
console.log (arr);
angular.foreach (arr, function (d) {
Console.log (D);
console.log (d.data);
})
});
});
Ada banyak tutorial tentang penggunaan terperinci $ q. Saya hanya menghubungi juga. Jika Anda tidak dapat berbicara dengan baik, Anda tidak berani bicara omong kosong. Kode di atas ditulis sesuai dengan pemahaman saya, dan tidak ada masalah setelah pengujian.