jq里延迟对象Deferred,状态变化后,会一直保持

    var defer = $.Deferred();
    defer.resolve(‘abc‘);
    defer.done(function (data) {
        console.log(data);
    })
    defer.done(function (data) {
        console.log(data);
    })

  以上代码运行结果:

  

  resolve之后的两次done()都执行了,而不是只执行第一次。说明延迟对象是一种状态,只要变更了,后面根据状态的函数都会执行。

时间: 2024-10-11 04:14:42

jq里延迟对象Deferred,状态变化后,会一直保持的相关文章

jquery源码解析:jQuery延迟对象Deferred(工具方法)详解2

请接着上一课继续看. $.Deferred()方法中,有两个对象,一个是deferred对象,一个是promise对象. promise对象有以下几个方法:state,always,then,promise,pipe,done,fail,progress. deferred对象除了有promise对象的所有方法外(通过jQuery.extend( obj, promise ),把promise对象的所有方法复制到deferred对象中),还有其他三个:resolve,reject,notify.

JQ中的延迟对象deferred中的promise等的使用

一.什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的. 通常的做法是,为它们指定回调函数(callback).即事先规定,一旦它们运行结束,应该调用哪些函数. 但是,在回调函数方面,jQuery的功能非常弱.为了改变这一点,jQuery开发团队就设计了deferred对象. 简单说,deferred对象就是jQuery的回调函数

jquery源码解析:jQuery延迟对象Deferred(工具方法)详解1

请先看上一课的回调对象.Deferred是通过extend添加到jQuery中的工具方法.如下所示: jQuery.extend({ Deferred: function( func ) { }, when: function( subordinate /* , ..., subordinateN */ ) { }}); 首先,来介绍下Deferred的使用: var cb = $.Deferred(); setTimeout(function(){ alert(1); cb.resolve()

JS搞基指南----延迟对象入门提高资料整理

原文:JS搞基指南----延迟对象入门提高资料整理 JavaScript的Deferred是比较高大上的东西,  主要的应用还是主ajax的应用,  因为JS和nodeJS这几年的普及,  前端的代码越来越多,  各种回调套回调再套回调实在太让人崩溃, 所以就从后端拖了一个延迟对象这货, 用来解决回调地狱这个问题 .  我们使用ajax的时候多数都是为ajax添加回调 ,然后异步向服务器发送请求, 比如如下原生的XHR代码: <!DOCTYPE html PUBLIC "-//W3C//D

jQuery 源码: 延迟对象补充。

// Deferred helper (3132)when 是延迟对象 Deferred的一个辅助方法. var dfd = $.Deferred(); //创建延迟对象 dfd.done(); dfd.fail(); //使用: $.when().done(); $.when().fail();   when的返回值,是一个延迟对象. 源码: return deferred.promise(); 举个例子:when可以等待多个延迟对象都成功后,触发成功.例子:(1) 成功必须多个都成功. fu

jQuery 延迟对象源码

Deferred延迟对象 jQuery.extend({ Deferred : function () { ; } when : function () { ; } }); 扩展了2个工具方法.延迟对象,是基于回调函数开发的.$.Deferred(); -> $.Callbacks();$.when(); 复习一下Callbacks: 例子(1) var cb = $.Callbacks(); setTimeout(function () { alert(111); cb.fire(); },

jQuery源码 02--(3043 , 3183) Deferred : 延迟对象 : 对异步的统一管理

//延迟对象 jQuery.extend({ Deferred: function( func ) { var tuples = [//resolve完成.reject未完成.notify进行中类似于fire,done.fail.progress回调函数的方法类似于add,jQuery.Callbacks()创建回调对象实现回调方法.映射数组. // action, add listener, listener list, final state [ "resolve", "

JavaScript学习总结(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

JavaScript学习总结(一)--延迟对象.跨域.模板引擎.弹出层.AJAX示例 目录 一.AJAX示例 1.1.优点 1.2.缺点 1.3.jQuery AJAX示例 二.延迟对象(Deferred) 2.1.回调函数 2.2.deferred.done 三.跨域 3.1.什么是跨域 3.2.JSONP跨域 3.3.jQuery使用JSONP跨域 3.4.跨域资源共享(CORS) 3.5.小结 四.弹出层 五.模板引擎 5.1.Hello World 5.2.方法 5.3.与AJAX结合应

jQuery的延迟对象

之前看别人的demo,发现在延迟对象被resolve时要执行的代码,有时会写在deferred.then方法里执行,有时会写在deferred.done方法里执行. 这让对延迟对象一知半解的我非常困惑,今天抽时间研究了一下下,发现:在某种环境下,两个方法的确能实现同样的效果. 这种特定的环境是怎样呢? 先看一下deferred.done的用法: // 创建deferred对象 var dtd = $.Deferred(); // 解决deferred对象 dtd.resolve('finish'