2016-09-23 4 views
1

Я сделал два завода и позвонил первым из второго, потребляя вторую фабрику в контроллере, но вместо того, чтобы получать данные как JSON, я получаю данные как состояние $$. Я новичок в angularJS пробовал много способов, но не смог решить, пожалуйста, помогите.Угловая фабрика, возвращающая объект State вместо данных JSON по обещанию

app.factory('userDetails', ['APIService', '$q', function (APIService, $q) { 
    getDetails: function() { 
     var deferred = $q.defer(); 
     var getFunc = function() { 
      APIService.doGetCall('Masters/employee/username/tarun') 
       .then(
       function (data) 
       { 
        deferred.resolve(data); 
       }, 
       function (data, status, headers, config) 
       { 
        deferred.reject('There was an error creating object'); }) 
        return deferred.promise; 
       } 
     var a = getFunc(); 
     return a; 

    } 
} 

vm.user = userDetails.getDetails(); 
console.log("user",vm.user); 

ответ согласно ниже фрагмент кода

Response

ответ

0

Вы должны использовать .then функцию, чтобы получить ответ там , Скорее я бы сказал, что вам не нужно создавать дополнительное обещание, его anti-pattern. Там, где вы могли бы использовать возврат обещания непосредственно по методу doGetCall.

app.factory('userDetails', ['APIService', '$q', function(APIService, $q) { 
    getDetails: function() { 
    var getFunc = function() { 
     return APIService.doGetCall('Masters/employee/username/tarun'); 
    } 
    var a = getFunc(); 
    return a; 
    } 
}]); 

vm.user = userDetails.getDetails().then(function(response){ 
    console.log(response.data); 
    vm.user = response.data; 
    console.log("user", vm.user); 
}, function(error){ 
    console.log(error) 
}).catch(exceptionHandler); 
0

userDetails.getDetails() возвращает обещание, поэтому вам нужно использовать .then(onsuccess, onRejected)

userDetails.getDetails().then(function(data){ 
    vm.user = data; 
    console.log("user",vm.user); 
}); 
0

У вас есть линия

return deferred.promise; 

внутри функции APIService.doGetCall. Он должен быть вне его.

+0

Что вы имеете в виду? –

+0

это означает, что функция getDetails должна возвращать обещание при вызове - обещание должно быть ** возвращено ** сначала, а затем после вызова API обещание может быть разрешено **. Как написано код, обещание возвращается ** только **, если вызов API не выполняется. – laney

+0

возьмите код и отформатируйте его .. вы увидите, что он правильно, что OP –

Смежные вопросы