每当程序运行时,它首先调用$scope
方法,因此我无法获得任何将从$http
方法加载Dbdata的数据。
var fileData = $http.get("JS/filesystemsdata.json").success(function (data) {
$scope.DbData = data;
$scope.isDBLoaded = true;
}).error(function (status) {
alert(status);
$scope.isDBLoaded = false;
});
var afterdata = $scope.getChilds("Common Files", "c,Program Files");
console.log(afterdata);
答案 0 :(得分:1)
只需将您喜欢的功能添加到success
承诺中,例如:
var fileData = $http.get("JS/filesystemsdata.json").success(function (data) {
$scope.DbData = data;
$scope.isDBLoaded = true;
var afterdata = $scope.getChilds("Common Files", "c,Program Files");
}).error(function (status) {
alert(status);
$scope.isDBLoaded = false;
});
答案 1 :(得分:1)
与问题标题中的假设相反,代码中的函数将按指定顺序调用:
$http.get
$scope.getChilds
但是,$http.get
的成功和错误回调是异步。这意味着当$http.get
数据准备就绪时将调用这些函数。即这可能需要1毫秒,或者这也可能需要一分钟(例如) - 成功/错误回调将在需要时调用,而不会停止主线程。
所以解决方法是将$scope.getChilds
部分放在成功回调中。
我建议您详细了解回调和promises以便更好地理解。
不推荐使用AngularJS $http docs,success
和error
方法,您应该使用then
代替:
$http
遗留承诺方法success
和error
已经存在 已弃用,将在v1.6.0中删除。使用标准then
方法 代替
答案 2 :(得分:0)
如果你想在第一件事之后执行第二件事,那么你可以使用 $ promise 或然后函数(然后是成功和错误的组合然后是新事物)
var fileData = $http.get("JS/filesystemsdata.json").then(function(data){
$scope.DbData = data;
$scope.isDBLoaded = true;
var afterdata = $scope.getChilds("Common Files", "c,Program Files");
console.log(afterdata);
}, function(status){
alert(status);
$scope.isDBLoaded = false;
});
然后
https://docs.angularjs.org/api/ng/service/ $ HTTP
for $ q