欢迎访问宙启技术站
智能推送

deferred方法怎么在jQuery项目中使用

发布时间:2023-05-15 14:04:45

在jQuery项目中使用deferred方法需要引入jQuery库,在引入同时需要了解deferred的使用方式和方法。

deferred对象是jQuery的一种特殊对象,它被用来处理异步操作并返回结果,使得异步代码更具有可读性和可维护性。

deferred有4种状态:pending(未完成)、resolved(已完成)、rejected(已失败)、settled(已完成或已失败)。

使用deferred的时候主要有以下几个步骤:

1.创建一个deferred对象

var deferred = $.Deferred();

或者

var deferred = new jQuery.Deferred();

2.执行异步操作

通常来说执行异步操作包括ajax请求、定时器、事件响应等。

$.ajax({

    url: 'xxx',

    success: function(data){

        // 异步执行完成时需要resolve或reject

        deferred.resolve(data);

    },

    error:function(){

        deferred.reject();

    }

});

3.对结果进行处理

当异步操作执行完成时,我们可以对结果进行处理。使用then()方法可以在异步操作执行成功或失败后分别执行不同的回调函数。

deferred.then(function(data){

    // 执行成功时的回调

},function(){

    // 执行失败时的回调

});

4.返回结果

异步操作的结果可以通过return语句返回,在调用then()方法的地方进行处理。

return deferred.promise();

详细说明

1.创建一个deferred对象

deferred对象可以通过new jQuery.Deferred()或$.Deferred()方式创建。在项目中 采用$.

var deferred = $.Deferred();

该方法可以返回一个新的空白deferred对象。

deferred对象是jQuery提供的异步编程的实现,通过链式调用来组合和控制异步代码。

2.执行异步操作

异步操作是指操作完成需要一定时间,在此期间,将代码的执行交给其它线程,而使用JavaScript线程处理其它的操作。

$.ajax({

    url: 'xxx',

    success: function(data){

        // 异步执行完成时需要resolve或reject

        deferred.resolve(data);

    },

    error:function(){

        deferred.reject();

    }

});

$.ajax()是jQuery中的异步方法,通过传入一个参数对象来设置请求的属性和事件处理程序。当请求成功时,执行success回掉函数,即为异步操作执行完成并返回结果,使用resolve()方法将结果传递给then()方法;如果请求失败,则执行error回调函数,即该异步操作执行失败,并使用reject()方法通知then()方法。

deferred.resolve()方法通知其监听者异步操作已经完成,如果有由.then()方法添加的回调函数,它们就会被调用,可以将异步操作返回的数据作为参数传递给resolve()方法。相同的,也可以使用deferred.reject()方法通知其监听着异步操作已经失败。

3.对结果进行处理

当异步操作执行完成时,我们可以对结果进行处理。使用$.Deferred()中.then()方法可以在异步操作执行成功或失败后分别执行不同的回调函数。then()方法接收两个参数,也即区分异步操作执行成功和失败的两个处理方式:

deferred.then(function(data){

    // 异步操作执行成功时的回调

},function(){

    // 异步操作执行失败时的回调

});

4.返回结果

通过deferred。promise()方法返回一个只读的对象,该对象表示异步操作完成后可用的结果。只读属性被称为约定,在Promises/A+规范的定义中,它是规范中异步操作的核心属性,表示异步操作已启动但未完成。promise()方法可以用于内部链式处理,也可返回给用户,以避免异步操作产生的数据集合发生改变或意外赋值。

$.ajax({

    url: 'xxx',

    success: function(data){

        // 异步执行完成时需要resolve或reject

        deferred.resolve(data);

    },

    error:function(){

        deferred.reject();

    }

});

return deferred.promise();

使用Deferred对象的好处

将代码从回调接口中解耦,以实现更好的可维护性,使异步代码更具有可读性。

异步操作的代码管理更加有效,将异步操作分配到可读性高的模块。

对于异步操作涉及到多个数据依赖的情况,deferred.pipeline()方法提供了更好的方式。

它提供了非常便捷的功能(当异步操作执行完成後执行其他任务),并且允许创建更通用、更健壮且可复用的业务逻辑。

deferred没有最小依赖,可以轻松地应用于如node.js、angular等其它JavaScript套件。

不足

需要耗费一定的时间和精力来学习deferred对象的使用方法,并适应其编码思想;

高并发下的瓶颈问题;

不同开发语言和库提供的deferred对象方法和规则上存在差异;

对于慢资源和考虑每个回调的开销的单个异步目标,deferred操作可能不是 选择。

结论

Deferred对象通过提供所需的上下文调用来简化异步编程。它通过提供一个像Promise对象的特殊API来处理异步代码,并使其更具可读性和可扩展性。Promises/A+规范定义的Promise对象是JavaScript中异步操作的一种高效解决方案,可以处理复杂的异步操作,使用灵活可读性强,建议在jQuery项目中尝试运用deferred对象实现异步编程的操作。