gpt4 book ai didi

javascript - 了解 jQuery 文档中 $.deferred 的示例

转载 作者:行者123 更新时间:2023-11-30 16:45:46 27 4
gpt4 key购买 nike

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

$.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 文档逐行告诉我们发生了什么,就像这样:

  • Check if the element already has a deferred attached for the given event
  • if not, create it and make it so it is resolved when the event is fired the first time around
  • then attach the given callback to the deferred and return the promise.

我遇到的困难和我无法理解的行如下:

return defer.done( callback ).promise();

我无法理解这行代码的用途以及它为什么有用,以及在这种情况下 promise 方法到底做了什么?

谁能解释一下?

最佳答案

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

来自jQuery docs :

The promise object provides a subset of the methods of the Deferred object (then, done, fail, always, pipe, progress, state and promise) to prevent users from changing the state of the Deferred.

因此,

return defer.done( callback ).promise();

... 正在添加要在延迟 (defer) 解析时执行的 回调 函数,然后返回延迟的相应 promise 。

您可能会发现以下问题很有用; What are the differences between Deferred, Promise and Future in JavaScript?

关于javascript - 了解 jQuery 文档中 $.deferred 的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31263269/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com