여러 개의 . then()은 단일 angularjs 약속에 있습니다.모두 _original_데이터를 사용합니다.
약속을 믿고 angularjs 앱을 만들고 있는데, 잘 되고 있지만 좀 더 최적으로 할 수 있을까?
코드의 선두에, 몇개의 데이터를 취득하기 위한 약속을 작성합니다.이 작업이 완료되면 모두 이 데이터를 사용하는 몇 가지 기능을 실행하고 싶습니다.앱의 관련 없는 부분에 기능이 첨부되어 있기 때문에 약속에 첨부되어 있는 순서를 알 수 없습니다.그것들은 순차적으로 행해질 필요도 없다.
app.service("Fetch", function ($q){
return function() {
var def = $q.defer();
somelibrary.asynccall(function(error, data){ //callback
if (error) def.reject(error);
else def.resolve(data);
});
return def.promise;
};
});
app.controller("ctrl", function ($scope, Fetch) {
var prom = Fetch();
//somewhere:
prom.then(function(data){$scope.var1 = data["VAR1"];});
//somewhere else:
prom.then(function(data){$scope.var2 = data["VAR2"]});
});
여기서 가장 큰 단점은 후기가then는 앞의 것이 종료될 때만 실행됩니다.여기서는 필요 없습니다.
또, 추가가 필요합니다.return data내면에function(data){...}, 그 이외의 경우는 다음과 같습니다.then()를 가지고 있지 않다.data이용할 수 있는.
이 상황에 더 적합한 다른 방법은 없을까?
편집: @jfriend00에서 언급했듯이, 제가 잘못 알고 있었습니다.실제로 두 함수는 약속이 정상적으로 해결되면 동시에 동시에 실행되어 체인이 되어 있지 않기 때문에 서로 의존하지 않습니다.도와주셔서 고마워요.
문제를 해결할 수 있을 것 같기 때문에 제 코멘트를 답변으로 바꿉니다.
당신의 패턴으로 두 사람은.then()같은 약속에 대한 콜은 약속이 해결되면 차례로 호출됩니다.두 번째.then()첫 번째 약속과는 무관하고 첫 번째 약속과는 무관하다.then().
이것들은 체인되어 있지 않기 때문에 두 번째는.then()처음에서 반환된 것에 의존하지 않는다.then()둘 다 같은 데이터가 전달됩니다.이들은 같은 약속의 여러 감시자일 뿐입니다. 마치 두 명의 이벤트 핸들러가 같은 이벤트를 듣는 것과 같습니다.
두 사람.then()동일한 약속에 대한 핸들러는 약속에 첨부된 순서대로 호출되며 동일한 데이터가 전달됩니다.
다음의 2개의 답변을 참조해 주세요.
그럼 약속과 약속의 차이점이 있나요?그럼 약속해그리고나서
체인에 대한 자세한 내용은 p.then(...).then(...)브런칭과 브런칭의 비교 p.then(...); p.then(...)약속하고.
병렬 실행이 필요합니다: $q.all()
$q.all(
function1,
function2,
function3
).then(function(responses) {
console.log(responses);
});
언급URL : https://stackoverflow.com/questions/25345520/multiple-thens-on-single-angularjs-promise-all-use-original-data
'programing' 카테고리의 다른 글
| 중첩된 경로 angularjs를 사용할 때 "상태에서...를 해결할 수 없습니다" 오류가 표시됨 (0) | 2023.03.04 |
|---|---|
| 게시 후 폼 값을 유지하는 방법 (0) | 2023.03.04 |
| json에 java (0) | 2023.03.04 |
| WordPress 위젯의 동적 입력 필드 (0) | 2023.03.04 |
| SQL IN 1000 조항 항목 제한 (0) | 2023.03.04 |