Deferred Object

function f1() {
var dfd = $.Deferred();
setTimeout(function () {
dfd.resolve();// resolved, rejected, or still in progress.
}, 500);
return dfd.promise();
}

f1().done(function () {
console.log("Hello World !")
}).fail(function () {
console.log("Error")
});

var wait = function (dtd) {
setTimeout(function () {
dtd.resolve();//表示处理结束, 调用后立即执行.done方法
//dtd.reject();//标识处理失败,调用后立即执行fail方法
}, 500);
return dtd.promise();
};
//使用$.when()为普通操作添加回调函数 为多个操作指定回调函数
//$.when(deferred, deferred,...):多有的延迟对象都调用了resolve()时才执行done;只要有一个延迟对象调用了reject()就会执行fail()。
//如果参数不是延迟对象就会跳过该参数并代表成功,如果参数都不是延迟对象,也会成功,会执行done。
//成功或失败的回调函数的参数对应when中的参数,如果参数是延迟对象回调函数得到undefined,不是延迟对象得到参数值。
//done中的方法可以接受参数由when调用的方法返回
var dtd = $.Deferred();
$.when(wait(dtd), wait(dtd))
.done(function (p1, p2) {
console.log("when 多个方法执行成功 ")
})
.fail(function () {
console.log("Error")
});
//还可以直接在wait对象上部署deferred接口。
$.Deferred(wait)
.done(function () {
console.log("Success ")
})
.fail(function () {
console.log("Error")
});

// 为了省事,可以把done()和fail()合在一起写,这就是then()方法。

$.Deferred(wait)
.then(function () {
console.log("Success ")
}, function () {
console.log("Error")
}).always(function () {
console.log("总是执行的方法");
});

/* 如果then()有两个参数,那么
第一个参数是done()方法的回调函数,
第二个参数是fail()方法的回调方法。
如果then()
只有一个参数,那么等同于done()。*/

deferred.always()

Add handlers to be called when the Deferred object is either resolved or rejected.

deferred.done()

Add handlers to be called when the Deferred object is resolved.

deferred.fail()

Add handlers to be called when the Deferred object is rejected.

deferred.notify()

Call the progressCallbacks on a Deferred object with the given args.

deferred.progress()

Add handlers to be called when the Deferred object generates progress notifications.

deferred.reject()

Reject a Deferred object and call any failCallbacks with the given args.

deferred.rejectWith()

Reject a Deferred object and call any failCallbacks with the given context and args.

deferred.resolve()

Resolve a Deferred object and call any doneCallbacks with the given args.

deferred.resolveWith()

Resolve a Deferred object and call any doneCallbacks with the given context and args.

deferred.then()

Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.

jQuery.Deferred()

A factory function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.

Also in: Core

jQuery.when()

Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.

.promise()

Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.

Jquery异步 Deferred Object的更多相关文章

  1. jQuery异步Deferred

    原文链接:http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html 普通 ...

  2. jQuery源码学习:Deferred Object

    本文所有讨论均基于jQuery版本3.1.1,官网http://jquery.com/. 一.Deferred Object 1. 简介和创建 详见API:http://api.jquery.com/ ...

  3. jQuery异步框架探究2:jQuery.Deferred方法

    (本文针对jQuery1.6.1版本号)关于Deferred函数的描写叙述中有一个词是fledged,意为"羽翼丰满的",说明jQuery.Deferred函数应用应该更成熟. 这 ...

  4. jQuery之Deferred源码剖析

    一.前言 大约在夏季,我们谈过ES6的Promise(详见here),其实在ES6前jQuery早就有了Promise,也就是我们所知道的Deferred对象,宗旨当然也和ES6的Promise一样, ...

  5. jquery 之 Deferred 使用与实现

    观察者模式是开发中经常使用的模式,这个模式由两个主要部分组成:主题和观察者.通过观察者模式,实现主题和观察者的解耦. 主题负责发布内容,而观察者则接收主题发布的内容.通常情况下,观察者都是多个,所以, ...

  6. jQuery的deferred对象

    应用场景:处理异步任务 看到一篇阮一峰老师的博客挺好的讲的就是jQuery的deferred对象.坦诚讲之前没有怎么用过这个东东呢. 摘其中几点记录下 (1) $.Deferred() 生成一个def ...

  7. ASP.NET MVC验证 - jQuery异步验证

    本文主要体验通过jQuery异步验证. 在很多的教材和案例中,MVC验证都是通过提交表单进行的.通过提交表单,可以很容易获得验证出错信息.因为,无论是客户端验证还是服务端验证,总能找到与Model属性 ...

  8. MVC验证11-对复杂类型使用jQuery异步验证

    原文:MVC验证11-对复杂类型使用jQuery异步验证 本篇体验使用"jQuery结合Html.BeginForm()"对复杂类型属性进行异步验证.与本篇相关的"兄弟篇 ...

  9. jquery的deferred使用详解

    原文:hhtps://www.cnblogs.com/shijingjing07/p/6403450.html -------------------------------------------- ...

随机推荐

  1. Elasticsearch Aggregation 多个字段分组统计 Java API实现

    现有索引数据: index:school type:student --------------------------------------------------- {"grade&q ...

  2. Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

    Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...

  3. mysql show processlist分析

    mysql> show processlist; +—–+————-+——————–+ | Id | User | Host | db | Command | Time| State | Inf ...

  4. react config test env with jest and create-react-app 1

    /.babelrc { "presets": ["@babel/preset-env","@babel/preset-react"], &q ...

  5. MySQL 报错MySQL server syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT'

    在hive的应用中,出现如下错误时You have an error in your SQL syntax; check the manual that corresponds to your MyS ...

  6. java-jdk7-forkjoin带有返回值

    来自并发编程网: http://ifeve.com/fork-join-3/ 如果这个任务必须解决一个超过预定义大小的问题,你应该将这个任务分解成更多的子任务,并且用Fork/Join框架来执行这些子 ...

  7. java-jdk7-forkjoin异常返回

    来自:http://ifeve.com/fork-join-5/ 在Java中有两种异常: 已检查异常(Checked exceptions):这些异常必须在一个方法的throws从句中指定或在内部捕 ...

  8. px、pt和em的区别

    (转载)http://www.1z1b.com/one-blog-a-week/px-em-pt/ 这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章,题目有点吓人,但是确实是现在国内网 ...

  9. mybatis逆向工程总结工具类

    逆向工程字面意思就是反向生成工程,和hibernate一样mybatis也有自己的逆向工程工具,hibernate的逆向生成我没有做过,不过我猜大概都已样,再说,hibernate的现在使用很少了,到 ...

  10. Android Studio 3.0找不到Android Device Monitor

    因为自Android Studio 3.0开始弃用Android Device Monitor,Android Developers官网上的原话是: Android Device Monitor is ...