jQuery中的Deferred和promise 的区别

发布时间:2019-05-22 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了jQuery中的Deferred和promise 的区别脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

DeferredPromise之间有什么区别呢?

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中的Deferred和promise 的区别全部内容,希望文章能够帮你解决jQuery中的Deferred和promise 的区别所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。