如何在promise成功函数之外访问$ scope.categories
var categoryPromise = $http.get("../rest/mcategory");
categoryPromise.success(function(data, status, headers, config)
{
$scope.categories=data;
});
categoryPromise.error(function(data, status, headers, config)
{
alert("Error");
});
alert(JSON.stringify($scope.categories));
我每次都未定义为什么?有办法外出吗?
答案 0 :(得分:0)
$http
调用是异步的,这意味着它不会按照代码的顺序执行,代码的实际顺序如下:
$http
alert
success
callback 因此,如果您想使用categoryPromise
中的数据,则必须在success
回调中执行此操作。
附注:不要使用.success
,已弃用。请使用.then
,如下所示:
promise.then(successCallback, errorCallback);
答案 1 :(得分:0)
正如Martijn指出的那样,如果您想将其用于直接修改,那么您将不得不在XHR请求未完成的情况下进行回调。
但是,如果您将其放入$scope
,可能是因为您将数据绑定到DOM中,并将其用于您的视图中。在这种情况下,Angular非常简洁,因为当承诺得到解决时,在下一个$digest
周期,它将填充您的$ scope域中所有{{category.strings}}
的类别对象。
愿意在评论中发帖,但不要有50个代表。
答案 2 :(得分:-1)
这里的问题是网页点击,网页然后继续执行代码而不等待响应,这就是为什么这里的网址可能会被浏览器点击,但是当执行到达指定类别时它未定义。
解决方案:
var categoryPromise = $http.get("../rest/mcategory");
categoryPromise.success(function(data, status, headers, config)
{
$scope.categories=data;
alert(JSON.stringify($scope.categories));
});
categoryPromise.error(function(data, status, headers, config)
{
alert("Error");
});