Javascript 理解jQuery文档中的$.deferred示例

Javascript 理解jQuery文档中的$.deferred示例,javascript,jquery,Javascript,Jquery,我只是想揭开方法$.Deferred在jQuery中的工作原理。我知道它主要用于AJAX内容,但我也希望将此方法用于非AJAX内容。我在阅读此方法时遇到了以下代码: $.fn.bindOnce = function( event, callback ) { var element = $( this[ 0 ] ), defer = element.data( "bind_once_defer_" + event ); if ( !defer ) {

我只是想揭开方法
$.Deferred
在jQuery中的工作原理。我知道它主要用于AJAX内容,但我也希望将此方法用于非AJAX内容。我在阅读此方法时遇到了以下代码:

$.fn.bindOnce = function( event, callback ) {
    var element = $( this[ 0 ] ),
        defer = element.data( "bind_once_defer_" + event );

    if ( !defer ) {
        defer = $.Deferred();
        function deferCallback() {
            element.unbind( event, deferCallback );
            defer.resolveWith( this, arguments );
        }
        element.bind( event, deferCallback )
        element.data( "bind_once_defer_" + event , defer );
    }

    return defer.done( callback ).promise(); 
   // what is this piece of code really doing and why is it necessary ? 
};
。。。现在,如果你一行一行地浏览代码,就很容易理解正在发生的事情

jQuery文档逐行告诉我们发生了什么,如下所示:

  • 检查元素是否已为给定事件附加了延迟
  • 如果不是,则创建它并使其在第一次触发事件时得到解决
  • 然后将给定的回调附加到延迟的回调并返回承诺
我遇到的困难和我无法理解的问题如下:

return defer.done( callback ).promise();
我无法理解这一行代码的目的,以及它为什么有用,以及promise方法在这个场景中到底做了什么

有人能解释一下吗?

promise()
为延迟请求创建一个promise对象。promise对象公开了延迟服务器上可用的方法的子集;它允许客户端向各种事件注册事件处理程序,但不修改延迟事件本身

从:

promise对象提供了
延迟
对象(
然后
完成
失败
始终
管道
状态
承诺
)方法的子集,以防止用户更改延迟的状态

所以,

return defer.done( callback ).promise();
。。。正在添加待在延迟(
延迟
)解析时执行的
回调
函数,然后为延迟返回相应的承诺


你可能会发现以下问题很有用

你能不能记下,并在以后的工作中应用它们?您的问题最初的格式很差,必须由编辑进行编辑/改进。@Matt Sure,会记下的!:)谢谢