jQuery中的Deferred和promise 的区别
作者:bea
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 对象的过程。
猜你喜欢
您可能感兴趣的文章:
- JS模拟简易滚动条效果代码(附demo源码)
- JS中的forEach、$.each、map方法推荐
- javascript HTML5 canvas实现打砖块游戏
- jQuery EasyUI中DataGird动态生成列的方法
- 基于jquery fly插件实现加入购物车抛物线动画效果
- JS简单编号生成器实现方法(附demo源码下载)
- JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
- JavaScript图像延迟加载库Echo.js
- jQuery技巧之让任何组件都支持类似DOM的事件管理
- JS+CSS实现闪烁字体效果代码
- js拖拽的原型声明和用法总结
- javascript如何实现360度全景照片问题汇总
- javascript制作照片墙及制作过程中出现的问题
- javascript拖拽效果延伸学习
- javascript事件委托的用法及其好处简析
- 基于javascript制作微博发布栏效果
- 纯js+html和纯css+html制作手风琴效果
- AngularJS中的$watch(),$digest()和$apply()区分
- Angular 根据 service 的状态更新 directive