서비스에 의해 반환되는 일부 약속을 연결하고 싶습니다. 이것은 약속을 되 돌리는 일부 메소드가 추가 매개 변수를 요구하지 않는 한 작동합니다. 이것은 내 예입니다.AngularJS : 체인 된 약속에 추가 매개 변수 전달
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);
});
이것은 예상대로 작동합니다. 하지만 내 서비스 second
에 추가 매개 변수 val
이 필요하면 어떻게해야합니까? 위의 방법을 사용하면 val
의 값은 에서 확인 된 값이되므로 "first resolved"
입니다.
주변에 어떤 방법은 다음과 같이 익명 함수를 중첩하지 않고, 거기 :
first().then(function() {
return second("foobar").then(function(value) {
console.log("all resolved", value);
});
});
내가 $q.all
사용에 대한 생각,하지만 이럴 당신이 당신의 약속에 대한 순서를 지정할 수 없습니다.
는'$의 timeout' 이미 약속, 내가 알고있는'$ q.defer'there –
에 대한 필요를 반환, 그냥했다 데모 용. 내 실제 경우에는 HTTP 호출이 있고 그 후에 데이터로 일부 처리를 수행합니다. 그래서 나는 여분의'$ q.defer'를 필요로한다. – 23tux
어 ... $ http는 이미 약속을 되 돌리며, 여분의 처리를 위해'.then' 할 수 있고, 코드에 대한 판단을 내릴 수 없다. 나는 보지 못했지만 연기 된 반 패턴과 같은 것이 아직도있다. 그것을 약속 할 때 콜백 API에 대해 작업 할 때는'$ q.defer' 만 필요합니다. –