2015-06-24 21 views
6

Tôi có 2 cuộc gọi http $ trả lại lời hứa nhưng lời hứa đầu tiên là tùy chọn. Tôi tin rằng trước tiên tôi phải tạo ra một lời hứa bằng cách sử dụng $q.defer() nhưng tôi thiếu một cái gì đó.Lời hứa đầu tiên tùy chọn trong chuỗi Góc

Dưới đây là nỗ lực làm việc phi của tôi:

var p = $q.defer(); 
if (condition) { 
    p = p.then(doOptionalFirst()); 
} 
return p.then(doOther()); 

đúng cú pháp để chuỗi là gì những 2 cuộc gọi với đầu tiên là bắt buộc?

Trả lời

5

Sử dụng $q.when (hoặc $q.resolve với AngularJS 1.4.1) để tạo lời hứa đã được giải quyết.

var p = $q.resolve(); 
if (condition) { 
    p = p.then(doOptionalFirst); 
} 
return p.then(doOther); 

Nếu bạn đang sử dụng một trì hoãn, bạn phải liên kết đến cái .promise và sau đó giải quyết hoãn lại vào một thời điểm thích hợp. Trong trường hợp này, bạn có thể xem xét rằng nếu condition đúng thì trì hoãn được tự động giải quyết. Vì vậy, bạn có thể bỏ qua một số mã có thể gây nhầm lẫn thêm bằng cách chỉ sử dụng một lời hứa đã được giải quyết.

Các vấn đề liên quan