jQuery中的Deferred和promise 的区别

 更新时间:2016年04月03日 12:50:54   作者:好JSER  
这篇文章主要介绍了jQuery中的Deferred和promise 的区别的相关资料,需要的朋友可以参考下

Deferred和Promise之间有什么区别呢?

promise

一个promise就是一个由 异步函数返回的对象 。当你想要自己编写一个这样的函数时你需要使用一个deferred。

var promise = $.ajax({
url: "/myServerScript"
});
promise.done(mySuccessFunction); 
promise.fail(myErrorFunction); 
var promise = $.ajax({
url: "/myServerScript"
}); 
promise.then(mySuccessFunction,myErrorFunction); 

使用Promises的好处有以下几点:

你可以多次调用done()和fail()函数,并使用不同的回调函数。或许你的一个回调函数用来停止动画,一个用来发起一个新的AJAX请求,一个用来将接受到的数据展示给用户。

var promise = $.ajax({ url: "/myServerScript" });
promise.done(myStopAnimationFunction); promise.done(myOtherAjaxFunction); 
promise.done(myShowInfoFunction); promise.fail(myErrorFunction);

即使在AJAX调用完成之后,你依然可以调用done()和fail()函数,并且回调函数可以立即执行。不同的状态之间并不会发生变量混乱。当一个AJAX调用结束时,它保持了一个成功状态或者失败状态,这个状态不会发生改变。

你可以合并promises。有时你需要同时进行两个AJAX请求并且想要在两个AJAX请求都成功时调用一个函数。为了完成这个任务,你需要使用一个新的$.when()函数:

var promise1 = $.ajax("/myServerScript1"); 
var promise2 = $.ajax("/myServerScript2");
$.when(promise1, promise2).done(function(xhrObject1, xhrObject2) { // 处理两个XHR对象 });

deferred

简单说,deferred对象就是jQuery的回调函数解决方案。在英语中,defer的意思是”延迟”,所以deferred对象的含义就是”延迟”到未来某个点再执行。

一个 deferred对象 能做的和一个promise对象差不多,但是它有两个函数来触发 done()和fail()函数 。

一个deferred对象拥有一个resolve()函数来处理一个成功的结果并执行与done()相关的函数。reject()函数则用来处理失败的结果并执行与fail()相关的函数。

你可以给resolve()和reject()函数都提供参数,然后它们都将传递给与done()和fail()相关的回调函数。

总结

jQuery 的ajax 就是返回一个promise 对象,里面含有done(), fail()方法; deferred 就是实现返回这个promise 对象的过程。

相关文章

  • Jquery常用技巧收集整理篇

    Jquery常用技巧收集整理篇

    jQuery 1.4给开发者带来了很多值得兴奋的新特性,同时使用jQuery的人也越来越多,为了方便大家对jQuery的使用,下面列出了一些jQuery使用技巧。
    2010-11-11
  • JQuery.validationEngine表单验证插件(推荐)

    JQuery.validationEngine表单验证插件(推荐)

    这篇文章主要介绍了JQuery.validationEngine表单验证插件(推荐)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • EasyUI创建对话框的两种方式

    EasyUI创建对话框的两种方式

    对话框(Dialog)是一个特殊的窗口(window),可以包含在顶部的工具栏和在底部的按钮。接下来通过本文给大家介绍easyui创建对话框的两种方式,非常不错,感兴趣的朋友一起看下吧
    2016-08-08
  • 详谈jQuery中的一些正则匹配表达式

    详谈jQuery中的一些正则匹配表达式

    下面小编就为大家带来一篇详谈jQuery中的一些正则匹配表达式。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • jquery实现自适应banner焦点图

    jquery实现自适应banner焦点图

    本文主要分享了jquery实现自适应banner焦点图的示例代码,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • jQuery$命名冲突怎么办如何解决

    jQuery$命名冲突怎么办如何解决

    某些框架也使用 $ 符号作为简写(就像 jQuery),如果您在用的两种不同的框架正在使用相同的简写符号,有可能导致脚本停止运行,下面有个不错的解决方法
    2014-01-01
  • jquery获取css的color值返回RGB的方法

    jquery获取css的color值返回RGB的方法

    这篇文章主要介绍了jquery获取css的color值返回RGB的方法,涉及jQuery字符串正则运算与数值转换的相关技巧,需要的朋友可以参考下
    2015-12-12
  • jquery阻止冒泡事件使用模拟事件

    jquery阻止冒泡事件使用模拟事件

    当点击span的时候div和body的事件全部触发了。要阻止这种发生并使用模拟事件。具体实现如下,感兴趣的朋友可以参考下
    2013-09-09
  • jQuery获取table行数并输出单元格内容的实现方法

    jQuery获取table行数并输出单元格内容的实现方法

    这篇文章主要介绍了jQuery获取table行数并输出单元格内容的实现方法,涉及jQuery针对表格与页面元素的动态操作技巧,需要的朋友可以参考下
    2016-06-06
  • jquery+css实现动感的图片切换效果

    jquery+css实现动感的图片切换效果

    这篇文章主要介绍了jquery+css实现动感的图片切换效果,效果实现很精致,动画简洁大方,推荐给大家,感兴趣的小伙伴们可以参考一下
    2015-11-11

最新评论