2014-11-05 1 views
0

각도 js 내 응용 프로그램에 대한 ItemProvider 쓰고 있어요. 서비스를 선택했습니다. 여기에 무슨 물론각도, 함수 콜백에 대한 올바른 방법

app.factory('ItemProvider', function($http) { 
    var url = "http://localhost:7888/api.php/json?"; 

    return { 
    get_data: function() {   
     $http.get(url). 
     success(function(data,status,headers,config) { 
      json = data; 
      console.log("app returned ok"); 
      console.log(json); 
      callback(json); 
     }). 

     error(function(data,status,headers,config) { 
      console.log("Error getting data from app!"); 
      json = data; 
      callback(json); 
     }); 

     callback = function(json) { 
     console.log("callback"); 
     return json; 
     } 
     console.log("already done"); 
    } 
    }; 
}); 

즉시 반환 $http을 통해 백엔드의 실제 호출하기 전에 get_data 반환 ...

가 어떻게 제대로 백엔드에서 데이터를 반환하는 get_data 기능이 없다는 것입니다 ? 위의 코드를 참조하여 콜백을 추가하려고 시도했지만 호출 될 때까지 get_data이 이미 완료되었음을 알게되었습니다 ...

+0

*? "내가 제대로 백엔드에서 데이터를 반환하는 get_data 기능이 어떻게"* 그 수 없습니다. 'get_data'는 콜백을 수락하거나 약속을 반환해야합니다. –

답변

1

$ http는 비동기 적으로 만 작동하도록 하드 코드되어 있습니다. 즉, 유일한 옵션은 해당 코드로 코딩하는 것입니다. 마음에. 이 때문에 get_data가 직접 데이터를 반환하는 것은 불가능합니다. 대신 콜백을 수락하거나 약속을 반환해야합니다. 약속의 길은 훨씬 편합니다 제 생각에는입니다.

app.factory('ItemProvider', function($http) { 
    var url = "http://localhost:7888/api.php/json?"; 

    return { 
    get_data: function(url) {   
     return $http.get(url); 
    } 
    }; 
}); 

사용 예 :

//... 
ItemProvider.get_data('/items') 
    .success(function (items) { 
    console.log(items); 
    }) 
    .error(function() {...}); 
//... 
+0

나는 Promise 솔루션을 좋아합니다! 나는 둘 중 하나를 사용할 두 가지 제공자를 가지고 있습니다. 나는 인터페이스를 너무 많이 바꾸고 싶지 않아, Promise를 사용하는 것이 콜백을 추가하는 것보다 더 우아 해 보입니다. – faboolous

+1

약속 솔루션에 대한 또 다른 좋은 점은 약속 이후로 서비스에서 반환하기 전에 결과를 변환하기 위해'.then '을 사용할 수 있다는 것입니다. '.then (함수 (결과) {return transformResult (결과);})'. 'count'와 같은 메소드에서는 정말 좋습니다. 그래서 나머지 API에서 보통 반환되는 count 속성을 가진 객체보다는 숫자를 반환 할 수 있습니다. –

+0

실제로 필자는이 데이터를 필터링해야하므로이 기능이 필요할 것입니다! 가장 환영받은 추가, 감사합니다! – faboolous

관련 문제