Constants.getContants是一个promise,它将获取我的应用程序中使用的所有常量。我想将它保存到$ scope变量,以便我可以在控制器或应用程序中的任何位置访问它。现在,每当我需要访问它时,我需要重复调用并在那里进行操作。 即使我尝试将其保存在$ scope中,它也不会在相应的处理程序之外。如何解决这个问题。
以下是我正在使用的代码:
Constants.getConstants().then(function (AppContants) {
$scope.responseCount = AppContants.data.serverUrl+AppContants.data.appId
console.log($scope.responseCount);
//$scope.$apply();
});
console.log($scope.responseCount);
这里的AJAX调用也不同步。我知道需要在处理程序函数内执行操作,以便我们可以确保只有在成功的AJAX调用之后才执行预期的操作。我需要在函数外部使用这些变量。我尝试了$ scope。$ apply()操作。它没有任何帮助。有办法解决这个问题吗?提前致谢。
答案 0 :(得分:0)
Constants.getConstants().then(function(response)
{
$scope.responseCount = response.data;
}, function(error)
{
console.log(error);
});
在您的服务中,您应该拥有类似
的内容 this.getConstants= function($username){
var endpoint = "url";
return $http({
method: 'get',
url: endpoint
});
};
答案 1 :(得分:0)
在你的情况下,第二个Console.Log在放置AJAX调用之后执行。它不会等待AJAX响应,因为它是异步调用。
您只能在解析AJAX校准后使用'$ scope.responseCount'属性。
作为一种解决方法,您可以:
答案 2 :(得分:0)
这就是事情。当您Constants.getConstants()
时,它会将响应作为承诺返回。因为javascript异步它不会等到响应返回。它只是继续执行。这就是为什么then
函数之外的控制台显示未定义的原因。
解决方法是,您可以在promise中添加一个函数,并将操作放在该函数中
Constants.getConstants().then(function(AppContants) {
$scope.responseCount = AppContants.data.serverUrl + AppContants.data.appId
console.log($scope.responseCount);
sampleFunc()
});
function sampleFunc() {
// do your oprations here
console.log($scope.responseCount);
}
答案 3 :(得分:0)
您可以在服务中缓存承诺:
app.service("ConstantCache", function(Constants) {
var promiseCache;
this.getPromise = function() {
if ( promiseCache } {
return promiseCache;
} else {
promiseCache = Constants.getConstants();
return promiseCache;
};
};
this.trashCache = function() {
promiseCache = null;
};
});
然后,可以在任何控制器中根据需要多次使用缓存的promise:
ConstantCache.getPromise().then(function(AppContants) {
$scope.responseCount = AppContants.data.serverUrl + AppContants.data.appId
console.log($scope.responseCount);
sampleFunc()
});