AngularJS 의 Promise --- $q 서비스 상세 설명
Javascript 에서 비동기 적 인 실현 방식 은 매우 많 습 니 다. 지연 함수, 리 셋 함수, 그리고 es6 에 추 가 된 생 성기 함수 입 니 다. 그 중에서 Promise 도 비동기 적 인 방식 중 하나 입 니 다.javascript 의 비동기 실현 방식 에 대한 상세 한 해석 과 차이 점 은 후기 에 블 로 그 를 업데이트 할 것 이 니 기대 하 십시오. 여기 서 더 이상 군말 하지 않 겠 습 니 다.
$q 서비스
간단히 말 하면 $q 서 비 스 는 AngularJS 에서 자체 패키지 로 이 루어 진 Promise 입 니 다.먼저 $q 가 자주 사용 하 는 몇 가지 방법 을 소개 합 니 다:
Promise , : , , 。
:
1.
2.
defer () 방법
$q 에서 resolve 방법 을 사용 하여 완료 상태 가 될 수 있 습 니 다.reject 방법 을 사용 하여 거부 상태 가 됩 니 다.그 중에서 defer () 는 deferred 대상 을 만 드 는 데 사 용 됩 니 다. defer. promise 는 promise 대상 을 되 돌려 then 방법 을 정의 하 는 데 사 용 됩 니 다.then 에는 성공 리 셋, 실패 리 셋, 상태 변경 리 셋 등 세 개의 인자 가 있 습 니 다.다음은 한 회사 프로젝트 가 만난 실례 를 보 겠 습 니 다.
'use strict';
angular.module('app')
.controller('positionCtrl',['$scope','$state','$q','$stateParams','$http',function ($scope,$state,$q,$stateParams,$http) {
var vm = this;
vm.position;
vm.company;
vm.isLogin = false;
function getPosition() {
var def = $q.defer();
$http.get('/data/position.json?id = ' + $stateParams.id)
.then(function (resp) {
vm.position = resp.data;
// console.log(resp.data);
// console.log(vm.position);
def.resolve(resp);
}).catch(function () {
def.reject(err);
});
return def.promise;
};
function getCompany(id) {
$http.get('data/company.json?id='+id)
.then(function (resp) {
vm.company = resp.data;
// console.log(vm.company);
})
.catch(function (err) {
console.log(err);
});
};
getPosition().then(function (obj) {
getCompany(obj.companyId);
});
}]);
상기 코드 업무 논 리 는 매우 간단 하 다. 먼저 회사 직위 vm. position 을 얻 고 직무 정보 중의 copanyId 에 따라 회사 vm. copany 를 얻 어야 한다.첫 번 째 함수 에서 getPosition 에서 먼저 $q. defer () 방법 을 호출 하여 deferred 대상 을 얻 습 니 다.return def.promise;문 구 는 분명히 함수 getPosition 을 Promise 대상 으로 되 돌려 줍 니 다. 그러면 getPosition () 함 수 를 호출 한 후에 'then () 방법' 을 직접 사용 할 수 있 습 니 다.
getPosition().then(function (obj) {
getCompany(obj.companyId);
});
이렇게 해서 두 함수 의 동기 집행 을 비동기 집행 으로 바 꾸 었 다.
all () 방법
이 all () 방법 은 여러 primise 의 배열 을 하나 로 합 칠 수 있 습 니 다.모든 promise 가 성공 하면 뒤의 리 셋 을 실행 합 니 다.리 셋 의 인 자 는 모든 promise 가 실 행 된 결과 입 니 다.어떤 방법 을 대량으로 실행 할 때 이 방법 을 사용 할 수 있다.
var funcA = function(){
var def = $q.defer();
console.log("funcA");
//some code
return def.promise;
}
var funcB = function(){
var def = $q.defer();
console.log("funcA");
//some code
return def.promise;
}
$q.all([funcA(),funcB()])
.then(function(result){
console.log(result);
});
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.