0

I have a angular controller which has bunch of functions which share the data between them. The problem is, The data which I return from function 1 is used in function 2 and then data returned in function 2 is used in function 3. My problem is the function 2 an d function 3 executes first and say that the data is not found is there a way where I can schedule the function 1 to execute first.

Following is my code for reference:

$scope.Read = function () {
    var get = ServiceName.Read();
    getConfig.then(function (d) {
        $scope.RID = d.data;
        alert($scope.RID);
    }, function (error) {
        $log.error('Oops! Something went wrong while fetching the application key data.' + error)
    })

}
$scope.Read();

Function 2 where I want to use the data:

$scope.getApp = function () {
        var sub ={
                "RID": $scope.RID
        }
        var App = ServiceName.getApp(sub);

        App.then(function (d) {
            $scope.LID = d.data.BUser;
        }, function (error) {
            $log.error('Opps! Something went wrong in getting appplication defaults');
        });
    }
    $scope.getApp();

Any help would be appreciated!

Thank You!

Best Regards,

Sandeep

3 Answers 3

1

If the first 2 are calls to a service that returns a promise, which is looks like they are. Could you not call the function in the .Then()?

Example:

$scope.functionOne(){
  CallToService().then(function(data){
  //Success call Function 2
   $scope.functionTwo(data);
 },function Error(){
   //Error/
 }
};


$scope.functionTwo(){
  CallToService2().then(function Success(data){
    //Call function 3
    $scope.function3(data);
  },
  function Error(){
  //Error
  }
}
Sign up to request clarification or add additional context in comments.

1 Comment

Yes I did but to do that I need to pass a value to the function 2 which always say that the scope is undefined. I'm not sure where exactly I'm going wrong
0

If you need to initialize something, you could consider using config, or run:

angular.module('myModule', []).
config(function(injectables) { 

}).
run(function(injectables) { 

});

see more here: https://docs.angularjs.org/guide/module

Comments

0

This happens because services are called asynchronously. You could chain the promises and return the value that you need in the next service and so on...

getConfig.then(function (d) {
  return d.data;
}, function (error) {
  
}).then(function(res){ 
  // Call second service with value returned from first service
}).then(function(res){
  // Call third service with value returned from second service
})

2 Comments

So, I'm able to execute the function as you said, but even after i see that the function is executed first time, still the scope says that it is undefined for the next function
$scope.getApp = function () { Read(); //calling function 1 here var sub ={ "RID": $scope.RID } var App = ServiceName.getApp(sub); App.then(function (d) { $scope.LID = d.data.BUser; }, function (error) { $log.error('Opps! Something went wrong in getting appplication defaults'); }); } $scope.getApp();

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.