ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AngularJS - promise-$q
    카테고리 없음 2016. 2. 23. 01:36
    반응형
    서버 요청 작업은 비동기 작업이다.
    따라서 응답이 오는 시점을 보장 할 수 없다.
    응답시점을 알지 못할 경우 , 코드를 순서대로 실행 할수있는 방법은?

    promise (프라미스) 란 ?
         서버에 요청을 하고 response 가 올때까지  다른 job 을 수행 할 수있고, response 가 왔을때 다시 원래 작업을 돌아 올수 있도록 하는 도구이다.

    활용 방식:

    $q 서비스 객체를 이용하여 (defer()) 자신이 원하는 작업을 지정할 수있는 객체를 생성

    defer() 로 생성된 객체의 기능:
         notify: 현재 상태의 변경을 통지하는 기능
         resolve: 성공적인 결과의 전달
         reject: 실패 결과의 전달

    개발자의 작업 순서:
         1. $q.defer() 를 이용하여 resolve()  하거나, reject() 할 수있는 객체를 준비
         2. 원하는 작업을 실행해서 $q.defer() 로 생성된 객체에 resolve하거나 reject()
         3. 작업의 종료 시에는 defer() 의 속성인 promise 객체를 반환
         4. 넘겨진 Promise 를 이용하는 곳에서는 then() 을 이용하여 처리

    예제
         app=controller(“DataCtrl”,function($scope,$q,$http){
              var gathering = function(){
                   var count=0;
                   var asyncJob=$q.defer();
              $http.get(“data.json”).success(function (data){
                   console.log(“first job finished..”);
                   asyncJob.notify(‘first job’);
                   asyncJob.resolve(data);
              });
              return asyncJob.promise;
    }


    $q.all() 을 이용하여 다중 promise 를 처리 할 수있다.
    여러개의 비동기화된 작업의 처리 결과를 한번에 묶어서 처리 가능.
    ex: 특정 데이터가 두 곳의 데이터를 같이 모아서 전달되어야 할 경우 유용함.
    파라미터는 배열의 형태로 여러개의 promise 작업이 들어 갈수있음.

    이 외에도 chaning 과 when 을 이용하는 방식이 있다.

    체이닝 방식: then() 뒤에 다시 promise 를 연결 하는 방식.
    $q.when(): 처리 결과에 또다른 것을 붙여야 할 경우 래핑하고 추가적인 데이터를 붙인다.

    (출처: 자바스크립트 이해와 AngularJS 활용)






    반응형
Designed by Tistory.