Angular Facebook 服务达到 API 调用限制
Angular Facebook service hits API call limit
我试图在 ng-repeat 中调用我的 Facebook 服务,但不知何故 Facebook API 调用限制很快就达到了。
我有这样的服务:
angular.module('core').factory('Facebook', ['$q',
function ($q) {
return {
getMutualFriends: function (fbUserId) {
var deferred = $q.defer();
var path = "/" + fbUserId;
FB.api(
path,
{
'fields': 'context.fields(mutual_friends)'
},
function (response) {
if (!response || response.error) {
deferred.reject('Error occured');
} else {
deferred.resolve(response);
}
}
);
return deferred.promise;
}
};
}
]);
在我的控制器中,我有一个调用服务的函数:
$scope.getMutualFriendsCount = function (fbUserId) {
if (fbUserId === '' || fbUserId === undefined) return 0;
Facebook.getMutualFriends(fbUserId)
.then(function (response) {
// untested response
return response.context['mutual_friends']['summary']['total_count'];
});
}
在我的模板中,我有 data-ng-repeat="profile in profiles"
并且对于每个配置文件,我尝试绑定结果 data-ng-bind=getMutualFriends(profile.fbId)
。
该服务设法与 FB 服务器通信,直到我开始注意到在循环期间有太多调用并且很快达到调用限制(在第 20 页上我的开发机器上刷新 1 或 2 次)仅配置文件)。有谁知道我如何更好地设计为多个 ID 获取共同好友的方法?
您不应该调用从监视表达式发出 HTTP 请求的函数,无论它是 ng-bind
还是等效的 {{ }}
。此表达式和后续的 HTTP 调用将在 每个 摘要周期被调用 - 显然不是您期望或需要的。
相反,获取您需要的数据并存储它,例如,每个 profile
,然后从 ng-repeat
.
中访问该值
另外,根据上面的评论,你应该考虑批量调用Facebook。创建一个单独的服务来处理所有这些复杂性,并向控制器公开一个简单的 API。
我试图在 ng-repeat 中调用我的 Facebook 服务,但不知何故 Facebook API 调用限制很快就达到了。
我有这样的服务:
angular.module('core').factory('Facebook', ['$q',
function ($q) {
return {
getMutualFriends: function (fbUserId) {
var deferred = $q.defer();
var path = "/" + fbUserId;
FB.api(
path,
{
'fields': 'context.fields(mutual_friends)'
},
function (response) {
if (!response || response.error) {
deferred.reject('Error occured');
} else {
deferred.resolve(response);
}
}
);
return deferred.promise;
}
};
}
]);
在我的控制器中,我有一个调用服务的函数:
$scope.getMutualFriendsCount = function (fbUserId) {
if (fbUserId === '' || fbUserId === undefined) return 0;
Facebook.getMutualFriends(fbUserId)
.then(function (response) {
// untested response
return response.context['mutual_friends']['summary']['total_count'];
});
}
在我的模板中,我有 data-ng-repeat="profile in profiles"
并且对于每个配置文件,我尝试绑定结果 data-ng-bind=getMutualFriends(profile.fbId)
。
该服务设法与 FB 服务器通信,直到我开始注意到在循环期间有太多调用并且很快达到调用限制(在第 20 页上我的开发机器上刷新 1 或 2 次)仅配置文件)。有谁知道我如何更好地设计为多个 ID 获取共同好友的方法?
您不应该调用从监视表达式发出 HTTP 请求的函数,无论它是 ng-bind
还是等效的 {{ }}
。此表达式和后续的 HTTP 调用将在 每个 摘要周期被调用 - 显然不是您期望或需要的。
相反,获取您需要的数据并存储它,例如,每个 profile
,然后从 ng-repeat
.
另外,根据上面的评论,你应该考虑批量调用Facebook。创建一个单独的服务来处理所有这些复杂性,并向控制器公开一个简单的 API。