Tôi muốn chuỗi một số lời hứa được trả về bởi các dịch vụ. Điều này hoạt động, miễn là một số phương thức trả về lời hứa, không yêu cầu tham số bổ sung. Đây là ví dụ của tôi:AngularJS: Vượt qua các tham số bổ sung cho các lời hứa bị xích
var first = function() {
var d = $q.defer();
$timeout(function() {
d.resolve("first resolved")
}, 100)
return d.promise;
};
var second = function(val) {
console.log("value of val: ", val);
var d = $q.defer();
$timeout(function() {
d.resolve("second resolved")
}, 200)
return d.promise;
};
first().then(second).then(function(value) {
console.log("all resolved", value);
});
Điều này hoạt động như mong đợi. Nhưng nếu dịch vụ của tôi second
cần thêm thông số val
để thực hiện công việc đó là gì? Với phương pháp trên giá trị của val
là "first resolved"
, bởi vì giá trị được giải quyết từ first
.
Có cách nào để khắc phục, mà không làm tổ chức năng vô danh như thế này:
first().then(function() {
return second("foobar").then(function(value) {
console.log("all resolved", value);
});
});
Tôi đã suy nghĩ về việc sử dụng $q.all
, nhưng IMHO bạn không thể chỉ định một trật tự cho lời hứa của mình.
'$ timeout' đã trả về một lời hứa, không cần một' $ q.defer'there –
tôi biết, đó chỉ là cho mục đích trình diễn. Trong trường hợp thực sự của tôi, tôi có một cuộc gọi http và sau đó, thực hiện một số xử lý với dữ liệu. Vì vậy, tôi cần thêm '$ q.defer' – 23tux
uhh ... $ http cũng trả về lời hứa và bạn có thể' .then' nó để xử lý thêm và trả lại ... không thể đưa ra phán đoán về mã Tôi đã không nhìn thấy nhưng nó vẫn còn _sounds_ như mô hình chống trì hoãn. Bạn _only_ cần '$ q.defer' khi làm việc chống lại một API gọi lại khi quảng bá nó. –