一、前言
為了讓前端們從回調的地獄中回到天堂, 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 這里的接口方法太多了,在我看來挺 主站蜘蛛池模板: 铜鼓县| 灌云县| 常山县| 上饶市| 青铜峡市| 凯里市| 洛扎县| 来凤县| 甘谷县| 宜兰县| 黄平县| 潮安县| 梁平县| 阜新| 防城港市| 大丰市| 太湖县| 武夷山市| 竹北市| 海宁市| 象州县| 读书| 枞阳县| 唐海县| 嘉定区| 阳高县| 南投市| 建德市| 沁水县| 邵阳县| 青龙| 政和县| 万载县| 富裕县| 任丘市| 阿坝县| 巧家县| 康乐县| 深泽县| 巴中市| 沿河|