我一直在尝试使用AngularJS中的Facebook登录API。但我无法更新变量。
$scope.init = function () {
$scope.name = ""
window.fbAsyncInit = function (response) {
FB.init({
appId: 'xxxxxxxxxxxxxxxxxxx',
xfbml: true,
version: 'v2.7'
});
FB.getLoginStatus(function (response) {
if (response.authResponse) {
//Calling Fb graph api if user is log in and fetching name of user
FB.api('/me', {
fields: 'name'
}, function (response) {
$scope.name = response.name;
console.log($scope.name); // 1
});
console.log($scope.name); // 2
}
});
};
console.log($scope.name); // 3
}
第一个console.log()
在$scope.name
中显示正确的数据,即仅在FB.api
中显示。但其他人没有显示更新的价值。
答案 0 :(得分:2)
这是因为您的代码在fb.api调用中是异步的,并且您的$ scope.name尚未分配。
在您的代码中:
FB.api('/me',{fields: 'name'}.function(response)
{
$scope.name=response.name; //$scope.name is assigned
//1
console.log($scope.name);
});
// 2
console.log($scope.name); //$scope.name is not YET assigned, because i'm called first!
Fb.api可能需要1,100或xxxms的延迟才能执行(并执行内部函数)。你的控制台记录在它下面,但是(// 2)它在执行fb.api函数后立即被调用(而不是他的决心)所以你的$ scope.name它没有被分配。
有关更多信息,请阅读有关异步回调和javascript承诺的一些教程。