2017-02-13 89 views
0

我有一个角度控制器,其中有一堆函数共享它们之间的数据。问题是,我从函数1返回的数据在函数2中使用,然后在函数2中返回的数据在函数3中使用。我的问题是函数2和函数3首先执行并说没有找到数据有没有办法让我可以安排功能1先执行。如何在页面加载后立即执行角JS功能

以下是我的代码以供参考

$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(); 

功能2,我想使用的数据

$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(); 

任何帮助,将不胜感激!

谢谢!

最好的问候,

桑迪普

回答

1

如果前2个是对返回承诺的服务的调用,看起来就像是。你能否在.Then()中调用函数?

例子:

$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 
    } 
} 
+0

是的,我没有,但要做到这一点,我需要一个值传递给函数2总是说范围是未定义的。我不确定我究竟在哪里出错 – Marshall

0

如果您需要初始化的东西,你可以考虑使用配置,或运行:

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

}). 
run(function(injectables) { 

}); 

多看这里:https://docs.angularjs.org/guide/module

0

这是因为服务是异步调用。你可以链中的承诺和回报,你在未来的服务需要等的价值...

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 
 
})

+0

所以,我可以像你说的那样执行函数,但即使在我看到该函数第一次执行后,仍然范围表示它没有被定义为下一个功能 – Marshall

+0

@Sandeep你能告诉我你是怎么做到的吗? –

+0

$ scope.getApp = function(){** Read(); ** //在这里调用函数1 var sub = {“RID”:$ scope.RID } var App = ServiceName.getApp(sub) ; App.then(function(d){ $ scope.LID = d.data.BUser; },function(error){ $ log.error('Opps!在获取应用程序默认值时出错了。 }); } $ scope.getApp(); – Marshall

相关问题