国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jQuery的promise與deferred對象在異步回調中的作用

2019-11-20 10:10:25
字體:
來源:轉載
供稿:網友

一、前言

為了讓前端們從回調的地獄中回到天堂, 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 這里的接口方法太多了,在我看來挺

主站蜘蛛池模板: 铜鼓县| 灌云县| 常山县| 上饶市| 青铜峡市| 凯里市| 洛扎县| 来凤县| 甘谷县| 宜兰县| 黄平县| 潮安县| 梁平县| 阜新| 防城港市| 大丰市| 太湖县| 武夷山市| 竹北市| 海宁市| 象州县| 读书| 枞阳县| 唐海县| 嘉定区| 阳高县| 南投市| 建德市| 沁水县| 邵阳县| 青龙| 政和县| 万载县| 富裕县| 任丘市| 阿坝县| 巧家县| 康乐县| 深泽县| 巴中市| 沿河|