我在访问服务请求之外的数据时遇到问题。请参阅下面的代码。该变量在服务请求中起作用。但是当我想在请求之外访问变量时,我得到一个未定义的变量。
有谁知道如何解决这个问题?
API.getUser($scope.email, $scope.password).then(function(data) {
$scope.user_id = (data.id);
console.log($scope.user_id) // this works
});
console.log($scope.user_id); // <--- Here i'm getting undefined.
答案 0 :(得分:0)
在回调函数中对范围使用$ apply()。
API.getUser($scope.email, $scope.password).then(function(data) {
$scope.user_id = (data.id);
$scope.$apply(); // <----- Here
console.log($scope.user_id)
});
答案 1 :(得分:0)
对API.getUser的调用是一个异步调用,下面的代码在回调执行之前执行。这就是$ scope.user_id未定义的原因。您可以对成功回调中的变量执行任何操作,并在需要使用此user_id进行更多操作时将其传递给函数。
答案 2 :(得分:0)
嗯,问题在于asyncs操作的Javascript行为和Promises($ q)的使用,当解释器运行代码时,执行如下操作:
1)发出这个ajax请求(异步操作),并返回一个Promise
API.getUser($scope.email, $scope.password)
2)在Promise中注册函数,在操作结束时执行
.then(function(data) {
$scope.user_id = (data.id);
console.log($scope.user_id) // this works
});
3)打印$ scope.user_id
的当前值console.log($scope.user_id);
打印未定义,因为此时异步操作尚未完成
4)有时,Async操作完成并执行此代码
$scope.user_id = (data.id);
console.log($scope.user_id) // this works
在最后一部分中设置了$ scope.user_id,并且console.log打印了正确的值。