亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JQuery 的 deferred . promise對象?

JQuery 的 deferred . promise對象?

慕田峪9158850 2019-02-15 15:11:06
描述: 返回一個 Promise 對象,用來觀察當某種類型的所有行動綁定到集合,排隊與否還是已經完成。這句話是什么意思看不懂呀 -_-!!誰來幫忙解釋下返回一個 Promise 對象,用來觀察當某種類型的所有行動綁定到集合,排隊與否還是已經完成。用來觀察當某種類型的所有行動綁定到集合,排隊與否還是已經完成。 是什么意思用來觀察 XX 與否還是已經完成 這個明白,但是XX的地方不明白 啥是 所有行動綁定到集合,排隊 ?
查看完整描述

2 回答

?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

  你說的這段描述是對 jQuery(selector).promise()的描述,并不是 jQuery.Deferred() 的描述。

  原文是:

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

  而這段話是說:

1jQuery(selector).promise() 函數是返回一個 Promise 對象,這個對象的作用是當綁定到集合【也就是$('div')這樣取到的集合】的指定類型的所有動作(promise方法的第一個參數 type ,默認是fx,也就是動畫)是否已經完成了。


  英文水平有限,有些地方看不怎么懂,這話說得有點亂,不過意思應該是這樣的,舉個例子:

123456$('#message').animate({width:400, height:240}, 3000).promise().done(function(){    console.log('animate end');});

  也可以寫成:

1234567$('#message').animate({width:400, height:240}, 3000); var promise = $('#message').promise(); promise.done(function(){    console.log('animate end');});


  這里的 $('#message') 就是所說的collection,


  而動畫 animate (即 fx)就是 certain type,


  里面的所有動作就是 action queue,當然,這里只有1個,就是默認的fx (但是文檔中沒有找到介紹其它的類型)。


  后面的 var promise = xxx 就是指返回的 Promise對象,這個對象在收到animate 方法里面的信號(這個信號包括 resolve, reject, notify, resolveWith, rejectWith, and notifyWith等)可以調用方法done(當然還有不少其它的方法,這里沒用到就不說了,自己看文檔吧),然后執行done的回調函數了。


  animate方法會自己發送promise的信號,不用手動去處理。具體細節可以參考 jQuery.Deferred() 方法,在API的介紹中有這個方法的使用示例。


  需要注意的是, jQuery(selector).promise()和jQuery.Deferred().promise()是不一樣的。

  從目前我知道的來說,jQuery(selector).promise() 是專門用來處理jquery中的動畫(animate)使用的,而jQuery.Deferred().promise()使用的范圍更廣,沒看源碼,不過猜一下,我覺得 jQuery(selector).promise()是jQuery在動畫的時候對jQuery.Deferred().promise()的特殊實現(或者叫做功能封裝)。


  然后再說一下jQuery.Deferred().promise()吧。它的一般用法為:

1234567var defer= $.Deferred();$.when(defer.promise()).then<done|fail|....>(參數...) defer.resolve('傳參數或留空');defer.reject('傳參數或留空');defer.notify('傳參數或留空');// ..... 其它信號

實例請自己去看API頁面。


上面的defer是一個延遲對象(deferred)引用,表示這個對象的信號會在將來發出。

接下來的 $.when(defer.promise()) 是指jQuery 要監視 defer的信號,收到信號后執行后面的then(或者done, fail或其它)的函數。而后面的defer.resolve<reject|notify>則是發出信號,通知jQuery延遲調用已經執行了,jQuery收到信號后,就去調用這個延遲的promise()后面的函數。



查看完整回答
反對 回復 2019-03-16
  • 2 回答
  • 0 關注
  • 744 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號