国产探花免费观看_亚洲丰满少妇自慰呻吟_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 這里的接口方法太多了,在我看來挺

主站蜘蛛池模板: 白城市| 新泰市| 柳河县| 贺州市| 堆龙德庆县| 宁远县| 东乡族自治县| 搜索| 吴堡县| 嘉祥县| 陕西省| 长海县| 个旧市| 阳信县| 宜兰县| 揭西县| 阳曲县| 突泉县| 吉首市| 东台市| 天水市| 南康市| 墨竹工卡县| 松溪县| 仪陇县| 和林格尔县| 交城县| 苏州市| 郸城县| 靖江市| 崇义县| 富阳市| 广灵县| 贡嘎县| 东港市| 河间市| 奈曼旗| 沁源县| 定兴县| 丰宁| 湖口县|