ในธุรกิจจริงคุณมักจะต้องรอให้มีการร้องขอหลายครั้งเพื่อดำเนินการให้เสร็จสมบูรณ์ก่อนดำเนินการตามขั้นตอนต่อไป แต่ $ http ใน AngularJs ไม่รองรับคำขอแบบซิงโครนัส
วิธีแก้ปัญหา 1:
การคัดลอกรหัสมีดังนี้:
$ http.get ('url1'). ความสำเร็จ (ฟังก์ชั่น (d1) {
$ http.get ('url2'). ความสำเร็จ (ฟังก์ชั่น (d2) {
// ตรรกะการประมวลผล
-
-
วิธีแก้ปัญหา 2:
วิธีการในนั้นจะถูกดำเนินการตามลำดับ
การคัดลอกรหัสมีดังนี้:
var app = angular.module ('app', []);
app.controller ('PromisEcontrol', ฟังก์ชั่น ($ scope, $ q, $ http) {
ฟังก์ชั่น getjson (url) {
var referred = $ q.defer ();
$ http.get (URL)
.Success (ฟังก์ชั่น (d) {
d = parseint (d);
console.log (d);
referred.resolve (d);
-
return reterred.promise;
-
getjson ('json1.txt') จากนั้น (function () {
กลับ getjson ('json2.txt');
}). จากนั้น (ฟังก์ชัน () {
กลับ getjson ('json1.txt');
}). จากนั้น (ฟังก์ชัน () {
กลับ getjson ('json2.txt');
}). จากนั้น (ฟังก์ชั่น (d) {
console.log ('end');
-
-
ทางออกที่สาม:
พารามิเตอร์แรกของวิธี $ q ทั้งหมดสามารถเป็นอาร์เรย์ (วัตถุ) หลังจากเนื้อหาทั้งหมดในพารามิเตอร์แรกจะถูกดำเนินการวิธีการในนั้นจะถูกดำเนินการ ค่าคืนทั้งหมดของวิธีการของพารามิเตอร์แรกจะถูกส่งผ่านเป็นอาร์เรย์ (วัตถุ)
การคัดลอกรหัสมีดังนี้:
var app = angular.module ('app', []);
app.controller ('PromisEcontrol', ฟังก์ชั่น ($ scope, $ q, $ http) {
$ Q.ALL ({First: $ http.get ('json1.txt'), วินาที: $ http.get ('json2.txt')}) จากนั้น (ฟังก์ชั่น (arr) {
console.log (arr);
Angular.foreach (arr, function (d) {
console.log (d);
console.log (d.data);
-
-
-
มีบทเรียนมากมายเกี่ยวกับการใช้รายละเอียดของ $ q ฉันแค่ติดต่อกันด้วย ถ้าคุณพูดไม่ดีคุณไม่กล้าพูดเรื่องไร้สาระ รหัสข้างต้นเขียนขึ้นตามความเข้าใจของฉันและไม่มีปัญหาหลังจากการทดสอบ