여러 개의 . 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 |