我正在(尝试)正在处理一个函数,它将返回用户是否有一个gravatar。 Javascript仅限于跨站点检查,所以这已经有点像hacky了。我在django中写这个,我可以使用它并编写一个API ...但我宁愿看看是否有办法做这个客户端而不是服务器端,但也许这是错误的心态。
这是用角度指令写的;但这是我到目前为止所提出的。
$scope.hasAvatar = function(user) {
if (user === undefined)
return false;
var url = 'http://www.gravatar.com/avatar/' + md5(user.email);
var image = new Image();
image.onload = function() {
return true;
}
image.onerror = function() {
return false;
}
image.src = url + "?d=404";
}
我还在学习javascript。我知道由于javascript的性质它不等待调用onload或onerror,它只是完成了函数,默认为false。
我是不是想要以这种方式解决错误的树?还是可以做回调或承诺?我非常感谢你的帮助。
答案 0 :(得分:0)
您应该使用承诺执行此操作,因为图像加载是异步的:
$scope.hasAvatar = function(user) {
var dfd = $q.defer();
if (user === undefined)
return $q.when(false);
var url = 'http://www.gravatar.com/avatar/' + md5(user.email);
var image = new Image();
image.onload = function() {
dfd.resolve(true);
}
image.onerror = function() {
dfd.resolve(false);
}
image.src = url + "?d=404";
return dfd.promise;
}
然后你这样称呼它
$scope.hasAvatar(user).then(function(hasAvatar) {
// logic here. perhaps bind to showAvatar
$scope.showAvatar = hasAvatar;
});
$scope.showAvatar = false;