jQuery Deferred 对象是一个强大的工具,它可以帮助我们更好地管理异步代码。它可以让我们更容易地处理异步函数的返回值,并且可以让我们更好地处理多个异步函数之间的依赖关系。
jQuery Deferred 对象有三种状态:未完成(pending)、已完成(resolved)和已失败(rejected)。当一个 Deferred 对象进入未完成状态时,它会创建一个 Promise 对象来保存当前的状态。Promise 对象可以用来注册回调函数来监听 Deferred 对象的状态变化。
// 使用 jQuery 的 Deferred 来创建一个 Promise 对象 var promise = $.Deferred(); // 注册回调函数来监听 Deferred 的状态变化 promise.done(function(data) { // resolved 状态时执行的回调函数 console.log('Promise resolved with data: ' + data); }).fail(function(error) { // rejected 状态时执行的回调函数 console.log('Promise rejected with error: ' + error); });
jQuery Deferred 还提供了一些方法来帮助我们控制异步代码之间的依赖关系。例如,如果你想要在一个异步函数执行完之后再执行另一个异步函数,你可以使用 jQuery 的 when() 方法来将这两个异步函数封装在一个新的 Promise 对象中。
// 声明需要执行的异步函数 var asyncFunc1 = function() { return $.ajax({ url: '/some/url' }); }; var asyncFunc2 = function() { return $.ajax({ url: '/some/other/url' }); }; // 使用 when() 方法将这些异步函數封装在一個新的 Promise 对象中 var promise = $.when(asyncFunc1(), asyncFunc2()); // 注冊回調函數監視 Promise 狀態的改動 promise.done(function(data1, data2) { console.log('asyncFunc1 returned data: ' + data1); console.log('asyncFunc2 returned data: ' + data2); });
总之,jQuery Deferred 是一个非常有用而又方便易用的工具。它能够帮助我们更好地处理异步代码、处理多个异步函數之间的依存關係、監視 Promise 狀態的改動、并能够根据不同情况采取不同行動。
jQuery 杂项方法
添加 .then 方法
deferred.then() 函数当Deferred(延迟)对象被解决,拒绝或仍在进行中时,调用添加处理程序。
注意:1. 参数可以为 null 。或者使用.done(),.fail()或者 .progress()只设置一种未经过滤的状态或值的回调类型。
2. 从jQuery 1.8开始, 方法返回一个新的 promise ,可以通过一个函数过滤 deferred(延迟)对象的状态和值,用来替换现在过时的deferred.pipe() 方法。
3. 回调是依照他们被添加时的顺序执行的,由于 deferred.then 返回 Promise 对象,可以链接其它的 Promise 对象,包括附加的 .then() 方法。
方法一
方法二
参数 | 描述 |
---|---|
doneFilter | Function类型 可选 当Deferred(延迟)对象得到解决时被调用的一个函数。 |
failFilter | Function类型 可选 当Deferred(延迟)对象拒绝时被调用的一个函数。 |
progressFilter | Function类型 可选 当Deferred(延迟)对象生成进度通知时被调用的一个函数。 |
参数 | 描述 |
---|---|
doneCallbacks | Function类型 当Deferred(延迟)对象得到解决时被调用的一个函数或函数数组。 |
failCallbacks | Function类型 当Deferred(延迟)对象拒绝时被调用的一个函数或函数数组。 |
progressCallbacks | Function类型 当Deferred(延迟)对象生成进度通知时被调用的一个函数或函数数组。 |
过滤解决值
过滤解决值。
过滤拒绝值
过滤拒绝值。
链任务
链任务。
jQuery 杂项方法
jQuery.makeArray()方法jQuery 杂项方法实例将一个HTML元素集合转换成对应的数组 $(function () {var elems = document.getEleme...
jQuery focus() 方法jQuery 事件方法实例 添加函数到 focus 事件。当 input 字段获得焦点时发生 focus 事件:$("input").focus(f...
jQuery mouseenter() 方法jQuery 事件方法实例 当鼠标指针进入 p 元素时,设置背景色为黄色:$("p").mouseenter(function(){ $("...
jQuery 库拥有完整的 AJAX 兼容套件。 jQuery AJAX 方法列表 AJAX 是一种与服务器交换数据的技术,可以在补充在整个页面的情况下...
CSS 参考手册实例为 @keyframes 动画规定一个名称:div{animation-duration:2s;-webkit-animation-duration:2s; }亲自试一试浏览...