2017-02-13 95 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

相關問題