2014-07-15 3 views
1

나는 angularjs에 초보자이며 새 공급자를 만들려고합니다.

myApp.provider('$Data', function() { 
    this.URL = 'http://maps.googleapis.com/maps/api/geocode/json?address=Singapore, SG, Singapore, 153 Bukit Batok Street 1&sensor=true'; 

    this.$get = $get; 
    $get.$inject = ['$http', '$q']; 

    function $get($http, $q) { 
     var that = this; 
     return { 
      isConnected: function() { 
       var bIsConnected = 'Default'; 
       $http({method: 'GET', url:that.URL}).then(function (data) { 
          bIsConnected = 'Yes'; 
          alert('Run this code!'); 
         }, function (data) { 
          bIsConnected = 'No'; 
         }); 
       return bIsConnected; 
      } 
     } 
    } 
}); 

Jsfiddle 데모 :이 내 코드입니다 내가 Data.isConnected() $를 실행 한 후 http://jsfiddle.net/0udm9/9dPsb/6/

, 결과는 항상 브라우저가 경고 상자를 표시하지만 '기본'입니다. 나는 성공 함수가 $ get이 아니라고 생각한다. 그리고 나는이 경우에 서비스 나 공장이 아닌 공급자를 사용해야합니다. 이 문제를 해결하기 위해 무엇인가 할 수 있습니까?

감사합니다.

답변

2

코드에 promise를 사용해야합니다. DEMO

공급자 :

isConnected: function() { 
    var deferred = $q.defer(); 

    $http.get(that.url).then(function(res) { 
     deferred.resolve('Yes'); 
     console.log('example:success', res); 
    }, function(err) { 
     deferred.resolve('No'); 
     console.log('example:error', err); 
    }); 

    return deferred.promise; 
} 

컨트롤러 :

$Data.isConnected().then(function(data) { 
    $scope.data = data; 
}); 

// UPD

당신이 비동기 코드로 반환 값을 사용해야하는 경우 개체를 사용해야합니다. // UPD 2

FRESH DEMO LINK

+0

DEMO

는 Miraage을 주셔서 감사합니다! 그러나 그것은 단지 간단한 예일뿐입니다. 이 함수에서 변수를 설정할 수 있습니까? 로그인 한 사용자를 확인하는 isUser()라는 다른 함수가 있습니다. Jsfiddle을 확인하십시오. [http://jsfiddle.net/0udm9/9dPsb/6/](http://jsfiddle.net/0udm9/9dPsb/6/) 감사합니다 – user3679257

+0

이렇게하면 기본 변수를 할당 할 수 없습니다. 5-10 분 후에 또 다른 예를 들어 드리겠습니다. – Miraage

+0

@Miraage, jsFiddle의 링크를 업데이트 해 주시겠습니까? – medokr

관련 문제