一、前言
為了讓前端們從回調的地獄中回到天堂, jQuery 也引入了 Promise 的概念。 Promise 是一種令代碼異步行為更加優雅的抽象,有了它,我們就可以像寫同步代碼一樣去寫異步代碼。 jQuery 從1.5版本開始實現了 CommonJS Promise/A 規范這一重量級方案,不過沒有嚴格按照規范進行實現,有一些API上的差異。
好,讓我們來看看他們的特性吧( 本文示例基于jquery 1.8版本以上 )。
二、示例
以前寫動畫時,我們通常是這么干的:
$('.animateEle').animate({ opacity:'.5'}, 4000,function(){ $('.animateEle2').animate({  width:'100px' },2000,function(){  // 這樣太傷了  $('.animateEle3').animate({   height:'0'  },2000); });});假如這么使用回調的話,那就太傷了。幸好,還有一些現成的 Promise 解決方案來優雅地解決這種問題。
我們看看 jQuery 提供的解決辦法。
var animate1 = function() { return $('.animateEle1').animate({opacity:'.5'},4000).promise();};var animate2 = function() { return $('.animateEle2').animate({width:'100px'},2000).promise();};var animate3 = function(){ return $('.animateEle3').animate({height:'0'},2000).promise();};// so easy,有木有,so clear,有木有$.when(animate1()).then(animate2).then(animate3);很明顯,更改后的代碼更易懂易讀了。
但是,上面的代碼,有些細節的東西并沒有透露,一不小心,就容易出錯,得不到我們想要的順序完成動畫的效果。下面讓我們來全面理解 jQuery 提供的 promise 和 deferred 對象的方法,看看到底如何使用。
三、promise和deffered對象方法
promise 對象其實就是 deferred 對象的特例,因為 promise 對象不能更改異步狀態,而 deferred 對象可以。這點在他們的方法設計上,有著明顯的體現。
1.promise對象方法
通常,對于DOM,動畫,ajax相關方法,我們都可以使用 promise 方法。調用 promise 方法,返回的是 promise 對象。可以鏈式調用 promise 方法。
promise對象常見的方法有三個 : done , fail , then 。
其它的方法就不要去記了, jquery 這里的接口方法太多了,在我看來挺 主站蜘蛛池模板: 白城市| 新泰市| 柳河县| 贺州市| 堆龙德庆县| 宁远县| 东乡族自治县| 搜索| 吴堡县| 嘉祥县| 陕西省| 长海县| 个旧市| 阳信县| 宜兰县| 揭西县| 阳曲县| 突泉县| 吉首市| 东台市| 天水市| 南康市| 墨竹工卡县| 松溪县| 仪陇县| 和林格尔县| 交城县| 苏州市| 郸城县| 靖江市| 崇义县| 富阳市| 广灵县| 贡嘎县| 东港市| 河间市| 奈曼旗| 沁源县| 定兴县| 丰宁| 湖口县|