是否有可能返回或者没有在javascript中加载图像

时间:2015-05-29 19:54:49

标签: javascript angularjs

我正在(尝试)正在处理一个函数,它将返回用户是否有一个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。

我是不是想要以这种方式解决错误的树?还是可以做回调或承诺?我非常感谢你的帮助。

1 个答案:

答案 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;