2014-09-30 4 views
0

나는 다음과 같은 방법으로 사용 asynchron의 데이터로 작업 :비동기 데이터를 처리하는 더 좋고 더 짧은 방법이 있습니까?

서비스 :

app.service("DashboardService", function($resource, $q, APIService) { 

    return { 
     getLatestDevices: getLatestDevices, 
    } 

    function getLatestDevices() { 
     var d = $q.defer() 
     APIService.query({route: 'devices'}).$promise.then(function(data) { 
      d.resolve(data) 
     }) 
     return d.promise 
    } 
} 

컨트롤러 :

app.controller("DashboardCtrl", function($scope, DashboardService) { 

    DashboardService.getLatestDevices().then(function(data){ 
     $scope.latestDevices = data 
    }) 

}) 

이 할 수있는 더 나은 또는 더 짧은 방법이 있나요? 아니면 올바른 방법으로합니까? 감사합니다!

답변

1

기본적으로 내가하는 일이지만, 당신이 불필요한 약속을하고있는 것처럼 보입니다. 이도 작동합니다, 내 생각 : 당신이 포장을 풀고 그 약속을 재 포장 할 이유

function getLatestDevices() { 
    return APIService.query({route: 'devices'}).$promise; 
} 

내가하지 않습니다! 당신이 그것을 반환하기 전에 APIService에서 반환 된 데이터를 변환해야하는 경우

이유 중 하나는 것이지만, 그렇다하더라도 당신은 암시 적 약속 체인 사용할 수 있습니다 자동으로 다음 호출

function getLatestDevices() { 
    return APIService.query({route: 'devices'}).$promise.then(function (data) { 
     return someTransformFn(data); 
    }); 
} 

약속을 만들고, 자동으로 해결 AngularJS와 반환 값으로

+0

감사합니다. 내가 당신을 사용할 때 코드 ... 나는 나의 컨트롤러에서 다음과 같은 오류가 발생했다 : "TypeError : 속성을 읽을 수 없다 '다음에'정의되지 않은 것 ' – nofear87

+0

Ups ... 반환 문제였다 ... 나는 첫 번째 리턴을 잊었다! – nofear87

관련 문제