2016-03-27 16 views
0

Bir kullanıcının yaptığı her istekte olduğu gibi companyid,employeeid gibi bazı önemli şeyleri almaya çalışıyorum. Yani bu,'dan önce alınmalıdır. Bundan sonra, kullanıcı her isteğiyle (get/company/{companyid}) belirlediği şirketidine dayanarak bilgi alır.Açısal Söz çalışmayan

Sahip olduğum sorun, şirket dışına alma yanıtının uzun ve açısal alması gereken yanıtın (get/company/{companyid}) henüz yapılmasını sağlamasıdır.

Bu beyaz sözü düzeltmeye çalıştım ama işe yaramıyor.

(function() { 
    angular.module('employeeApp') 
     .service('authenticationservice', authenticationservice); 

    function authenticationservice($http,$location,authenticationFactory,$q,GLOBALS,$cookies) { 

     this.validateUser = function() { 
      var vm = this; 
      vm.deferred = $q.defer(); 

      data = {"api_token": api_token}; 

      return $http.post(GLOBALS.url+'show/employee/' + $cookies.get('employeeid'),data) 
       .success(function(response) 
       { 
        vm.deferred.resolve(response); 
       }) 
       .error(function(err,response) 
       { 
        vm.deferred.reject(err); 
       }); 

      return vm.deferred.promise; 
     } 
    } 
})(); 

Rotalar benim yolları kullandığım file (In dosyasını

Hizmeti:

Burada kullanıcı hakkında bazı önemli bilgiler (Ben her isteği ile yaptığımız) almayı deneyin tüm önemli kullanıcı değişkenlerini ayarlamak için authenticationservice.)

Sorun, kullanıcı bilgilerinin geç ve açısal olarak ayarlanmış olması, henüz ayarlanmayan companyId'yi kullandığı homeController öğesine gitmesidir.

Teşekkür

+0

'$ http' zaten sadece geri dönebilirler bir söz verir. Niçin $ q'da sarmaya çalışıyorsun? – migg

+0

'.success' kullanımdan kaldırıldı. Dokümanlara bakın https://docs.angularjs.org/api/ng/service/$http#deprecation-notice – user2950720

+0

İade etmeden önce sözünü vermeniz gerekir: vm.deferred.resolve(); –

cevap

1

Geçerli kodunuzdaki sorun return $http.postvalidateUser yönteminizde iki kez döndürme ifadesi var. return vm.deferred.promise; &'u döndürmeden önce, $http.get döndüren bu yöntem, özel olarak oluşturulan sözün yönteminizden geri dönmemesinin nedenidir. İlk return'u $http.get'dan kaldırarak sorunu giderecek olsanız da, bu tür bir düzeltmeye gitmenizi tavsiye etmem, çünkü uygulanacak kötü bir model olarak kabul edilir. Daha ziyade, veriyi zincir vaat etme mekanizmasına döndürmek için $http yöntemi, & kullanım .then kullanarak söz vermeniz gerekir.

Kod

function authenticationservice($http, $location, authenticationFactory, $q, GLOBALS, $cookies) { 
    this.validateUser = function() { 
    var vm = this; 

    data = { 
     "api_token": api_token 
    }; 

    return $http.post(GLOBALS.url + 'show/employee/' + $cookies.get('employeeid'), data) 
     .then(function(response) { 
     var data = response.data; 
     retrun data; 
    }, function(err) { 
     return $q.reject(err); 
    }); 
    } 
} 
0

yapmak için emin $ http sen denetleyicisi eylem bir değer döndürür ve bir boşluk eylem olmadığını kontrol etmem gereken bir $ vaadi nesnesi döndürür.