javascript - 了解 animateSlider.js 中 $.resolve 的用法

标签 javascript jquery

我刚刚浏览 animateSlider.js 的代码,发现了以下代码行:

animDuration:   function(page)
        {
            var $slideAnimations            =   this.slides.eq(page);
            var slideAnimationsCount        =   $slideAnimations.children("*.animated").length;
            var animationStart              =   +new Date();

            // DIFF :: understand what $.Deferred() is used for ?
            var promise                     =   new $.Deferred();
            var animationTime,count         =   0;
            $slideAnimations.on("animationend webkitAnimationEnd oanimationend MSAnimationEnd",function()
                {
                    var animationEnd    =   +new Date();
                    animationTime       =   Math.ceil((animationEnd -animationStart)/1000)*1000;
                    count++;
                    if (count == slideAnimationsCount)
                    {
                        // DIFF :: understand what resolve is used for ?
                        promise.resolve(animationTime);
                    }
                });
            return promise;
        }

上面的函数被这样调用:

    this.animDuration(page).done(function(animationTime)

现在我的问题是参数animationTime如何传递给done()函数?

如果我浏览代码,就会像这样创建一个新的 defered 实例:

var promise =   new $.Deferred();

并且有以下内容:

promise.resolve(animationTime);

resolve 传递了 animationTime 参数,然后返回的 Promise 如下所示:

return promise;

但是我仍然不太明白是谁将 animationTime 传递给了 did() 函数,有人可以解释一下吗?

关注的代码行可见 HERE

谢谢。

亚历克斯-z。

最佳答案

这是promise model of asynchronous programming 。虽然它已成为 language 的一部分,您看到的是jQuery implementation of this interface 。如果您阅读了所有这些引用资料,您就会了解它在您的案例中的用途。

但是,为了给您提供入门知识,请考虑这个经典的 $.ajax 函数

$.ajax({url: ..., success: function(animationTime){} });

问问自己“什么是传递animationTime”到成功回调?那么是不是很难想象上面的代码是这种形式

$.ajax1({url: ...}).on('success', function(animationTime){});

距离此仅一小步

$.ajax2({url: ...}).success(function(animationTime){})

不是吗? :) 这一切都是可以 promise 的。它实现了一个接口(interface),有时称为 thennable,它具有诸如 done 之类的函数,以允许您链接异步计算。

关于javascript - 了解 animateSlider.js 中 $.resolve 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32924249/

相关文章:

javascript - 如何使用 Javascript 将具有相同名称的对象分组?

javascript - 延迟显示 "no Javascript"警告?

jquery - 使用 JQuery .serialize() 组合具有相同名称的表单元素?

javascript - HTML - 单击时带有 html 部分的新页面

javascript - 如何从 MYSQL 反序列化查询结果?

javascript - 搜索功能返回多个结果

javascript - 更改/注销 Handlebars 助手(Meteor)

javascript - 如何制作按钮动画波浪?

javascript - 选择选项使用 JQUERY 通过文本获取值

javascript - 如何使用 jQuery 将动态表行添加到 Wordpress 数据库