javascript - AngularJS - 如何从图像对象创建延迟对象

标签 javascript angularjs deferred

我正在尝试通过简单的图像对象创建来创建一个延迟对象,如下所示:

var image = new Image();
image.src = 'some url';
image.onload = function() {
   // some code
}

现在...如何在 AngularJS 中使用 $q 库创建延迟对象?可能吗?

最佳答案

我假设有一些工厂,您计划在其中放置此功能。然后:

.factory('utils', function($q) {
    return {
        createImage: function(src) {
            var deferred = $q.defer(),
                image = new Image();
            image.onload = function() {
                deferred.resolve(image);
            };
            image.src = src;
            return deferred.promise;
        }
    };
});

然后你就可以像往常一样使用它:

utils.createImage('/assets/images/big-logo.png').then(function(imgObj) {
    console.log(imgObj);
});

Angular 1.3。从 Angular 1.3 版本开始,promise 服务 $q 也允许类似于原生的新语法 Promise构造函数。那么上面的函数就可以重写:

createImage: function(src) {
    return $q(function(resolve, reject) {
        var image = new Image();
        image.onload = function() {
            resolve(image);
        };
        image.src = src;
    });
}

您可以将这两个版本与 1.3 一起使用。

最后是简单的演示:http://plnkr.co/edit/MbQEDPHoAurFd6JwHTji?p=preview

关于javascript - AngularJS - 如何从图像对象创建延迟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26608748/

相关文章:

javascript - 比较 2 个对象并更新 JavaScript 中的匹配对象

javascript - 如何将 cookie 与点击事件显示的内容一起使用? (HTML/CSS/jQuery)

javascript - 如何取消/停止在 IE javascript 中上传文件

javascript - 如何使用 $watch 稳定的方式

C++ 模板实例化 - 与 STL 不同,为什么我的模板实例化必须始终是显式的?

javascript - HTML Canvas 的文本未显示在屏幕上

javascript - 路径或参数中不能有句点

javascript - Angular ng-init $scope 函数未正确更新模型?

javascript - q- 何时返回,如 promise 链中的 "defer.resolve(myData); return defer.promise;"VS 只是 "return myData"

javascript - 在 jquery 中使用 Deferred/When 来延迟函数的问题