您现在的位置: 万盛学电脑网 >> 程序编程 >> 数据库 >> 数据库综合 >> 正文

jQuery Deferred对象介绍

作者:佚名    责任编辑:admin    更新时间:2022-06-22

今天为大家介绍的是jQuery Deferred对象介绍,希望大家会喜欢。

$.Deferred的实现

创建三个$.Callbacks对象,分别表示成功,失败,处理中三种状态

创建了一个promise对象,具有state、always、then、primise方法

通过扩展primise对象生成最终的Deferred对象,返回该对象

$.when的实现

接受若干个对象,参数仅一个且非Deferred对象将立即执行回调函数

Deferred对象和非Deferred对象混杂时,对于非Deferred对象remaining减1

Deferred对象总数 = 内部构建的Deferred对象 + 所传参数中包含的Deferred对象

所传参数中所有Deferred对象每当resolve时remaining减1,直到为0时(所有都resolve)执行回调

这就是$.Deferred和$.when的全部了,各个方法及使用稍后介绍。

代码阅读中会发现then和when方法的实现最难理解,看多次,后感回味无穷,非常巧妙。then内部会用到不同寻常的递归,when用到了计数,每次异步成功后减一,直到为0后表示全部异步操作成功,这时才可执行回调。

上面提到Deferred里有3个$.Callbacks的实例,Deferred自身则围绕这三个对象进行更高层次的抽象。以下是Deferred对象的核心方法

done/fail/progress 是 callbacks.add,将回调函数存入

resolve/reject/notify 是 callbacks.fire,执行回调函数(或队列)

下面举一些示例看看如何使用Deferred对象。

一、done/resolve

function cb() {

alert('success')

}

var deferred = $.Deferred()

deferred.done(cb)

setTimeout(function() {

deferred.resolve()

}, 3000)

在HTTP中表示后台返回成功状态(如200)时使用,即请求成功后可执行成功回调函数。

二、fail/reject

function cb() {

alert('fail')

}

var deferred = $.Deferred()

deferred.fail(cb)

setTimeout(function() {

deferred.reject()

}, 3000)

在HTTP中表示后台返回非成功状态时使用,即请求失败后可执行失败回调函数。

三、progress/notify

function cb() {

alert('progress')

}

var deferred = $.Deferred()

deferred.progress(cb)

setInterval(function() {

deferred.notify()

}, 2000)

在HTTP中表示请求过程中使用,即请求过程中不断执行回调函数。这可用在文件上传时的loading百分比或进度条。

以上就是我们为大家准备的jQuery Deferred对象介绍的相关内容,希望对大家可以有所帮助。