相关文章推荐
Deferred是jQuery中用于处理异步操作的对象,类似于ES6的Promise。它通过$.Deferred()构造函数创建,并提供了一系列方法如.then()、.always()等来注册回调函数。在解决(resolve)或拒绝(reject)状态改变时,对应的回调队列会被执行。常用于解决回调地狱问题,例如在等待异步图片加载完成后再执行后续操作。 摘要由CSDN通过智能技术生成

Deferred跟ES6中的Promise的套路是差不多的,不过Deferred是JQuery中的函数,我们先来看一下Deferred的一些介绍吧。

$.Deferred() 是一个构造函数,用来返回一个链式实用对象方法来注册多个回调,并且调用回调队列,传递任何同步或异步功能成功或失败的状态。

  • $.Deferred() 构造函数创建一个新的 Deferred(延迟)对象, jQuery.Deferred 可传递一个可选的函数,该函数在构造方法返回之前被调用并传递一个新的 Deferred 对象作为函数的第一个参数。例如被调用的函数可以使用 deferred.then()来附加回调函数。
  • 一个 Deferred 对象开始于挂起状态。任何使用 deferred.then(), deferred.always(), deferred.done(), 或者 deferred.fail() 添加到这个对象的回调函数都是排队等待执行的。调用 deferred.resolve() 或 deferred.resolveWith() 转换延迟到解决状态后立即执行设置的 doneCallbacks 。调用 deferred.reject() 或 deferred.rejectWith() 转换延迟到拒绝状态后立即执行设置的 failCallbacks 。一旦对象已经进入了解决或拒绝状态,它保持该状态。回调仍然可以添加到已解决或已拒绝的 Deferred 对象——它们会立即执行。
  • 1、处理异步请求后再执行业务代码;
    2、解决回调地狱;

    今天遇到这样一个功能,就是上传图片时,要保存图片的高和宽,但是获取图片的高宽,创建一个Image对象,要等Image对象load完成后才会返回图片的信息,因此这是个异步操作。上传一张图片是好办的,但是如果有多张图片呢?所以我就想到了Deferred
    举个栗子:

    uploadImgs: function(){
    	var deferred = $.Deferred();
    	var _URL = window.URL || window
    首先, Deferred 是Promise的一种实现,并且, Deferred 对象 可以通过Callbacks实现,两者的使用方式也很像。 由于Promise有两种完成状态,一种resolve,一种reject,所以,对应的Callbacks就有两个,还有一个notify,似乎不是标准的Promise状态? Deferred 用到了Callbacks里面的memory参数,是因为Promise达到完成...
    deferred 对象 是一个 延迟 对象 ,意思是函数 延迟 到某个点才开始执行,改变执行状态的方法有两个(成功:resolve和失败:reject),分别对应两种执行回调(成功回调函数:done和失败回调函数fail) 2.$.when() 【文字转载于菜鸟教程】 deferred 1.html 在多个 延迟 对象 传递给 jQuery .when() 的情况下,该方法返回一个新的"宿主" 延迟 对象 ,当所有的...
    在JQ的 延迟 对象 中,$. deferred ()有比较多的下辖 对象 ,下面将解析有那些 对象 ,先把 deferred 封装起来:       var  def = $. deferred ();       $. deferred (fn)                               //  代表 延迟 执行开始前执行的 对象 fn()       def.done(fn)
    1.只需要在调用普通函数或方法前加上关键字defer,就完成了defer所需要的语法。当defer语句被执行时,跟在defer后面的函数会被 延迟 执行。直到包含该defer语句的函数执行完毕时,defer后的函数才会被执行,不论包含defer语句的函数是通过return正常结束,还是由于panic导致的异常结束 2.defer语句经常被用于处理成对的操作,如打开、关闭、连接、断开连接、加...
    什么是defrred 对象 开发网站过程中,我们经常遇到某些耗时长的JS操作,其中,既有异步操作(如Ajax读取服务器数据),也有同步的操作(如遍历一个大型数组),它们都不能立即得到结果。通常的做法是,为它们制定回     调函数(callback)。即事先规定。一旦它们运行结束,应该调用哪些函数。
    1.什么是 deferred 对象 deferred 对象 是一个 延迟 对象 ,意思是函数 延迟 到某个点才开始执行,改变执行状态的方法有两个(成功:resolve和失败:reject),分别对应两种执行回调(成功回调函数:done和失败回调函数fail) 2. deferred 对象 使用示例ajax方式其实是 deferred 对象 1)普通的ajax操作 $.ajax({ url: "index.html", ...
    想象这样一种场景:通常我们在编程的时候,经常会遇到资源申请完成后,再手工释放。比如打开一个文件后,再执行 close 操作关闭文件描述符,如果你不关闭,则会产生描述符泄露。如果程序逻辑复杂,这非常容易出错。因为你的函数可能随时遇到错误而 return 出去,此时你极易忘记 close 掉申请过的资源。 Go 提供了关键字 defer 帮忙我们解决这个问题。它有点像 C++ 里的 RAII 机制,...
     
    推荐文章