Единственная причина, по которой я могу придумать, - это asynchronous
вызов promises
. Вот что происходит:
Каким-то образом вы звоните Service2.getDetails($scope.genewtId)
до того, как значение $scope.genewtId
будет установлено после завершения обещания Service1.getId("abc").then
, и поэтому значение остается null
Попробуйте:
$scope.getID = function(isCalledAfterDetails) {
Service1.getId("abc").then(function(response){
$scope.genewtId = response.data[0].Id;
console.log($scope.genewtId);
if(isCalledAfterDetails && $scope.genewtId !== null){
$scope.getDetails();
}
}, function(error){
console.log(error.statusText);
});
};
$scope.getDetails = function() {
if($scope.genewtId === null){
$scope.getID(true);
}else{
Service2.getDetails($scope.genewtId).then(function(response){
// here response is having an error
$scope.data1 = response.data;
console.log($scope.data1.toString());
}, function(error){
console.log(error.statusText);
});
}
};
Даже если этот подход работает, я настоятельно рекомендую вам реализовать вызовы функций лучше, поскольку $scope.getDetails()
зависит от $scope.getID()
для установки значения $scope.genewtId
.
Если вы хотите получить предложение о том, как его реализовать, обновите вопрос, указав вариант использования и еще немного кода
Обновление
$scope.getID = function() {
Service1.getId("abc").then(function(response){
$scope.genewtId = response.data[0].Id;
$scope.getDetails();
}, function(error){
console.log(error);
});
};
$scope.getDetails = function() {
Service2.getDetails($scope.genewtId).then(function(response){
// here response is having an error
$scope.data1 = response.data;
console.log($scope.data1.toString());
}, function(error){
console.log(error.statusText);
});
};
Использование услуги
В service.js
getDetails = function(id){
var deferred = $q.derfer();
$http.get('/user/'+id).then(function(response){
var newId = response.data[0].Id;
$http.get('/user/details'+newId).then(function(details){
deferred.resolve(details)
})
})
return deferred.promise;
}
controller.js
$scope.getDetails = function() {
MySvc.getDetails("abc").then(function(response){
console.log(response) // your details here
}, function(error){
console.log(error.statusText);
});
};