promise

使用promise

我們先可以了解一下$q的defer()方法創(chuàng)建的對象具有哪些方法

resolve(value):用來執(zhí)行deferred promise,value可以為字符串茬底,對象等瞭吃。

reject(value):用來拒絕deferred promise舔哪,value可以為字符串酒繁,對象等皮钠。

notify(value):獲取deferred promise的執(zhí)行狀態(tài)识樱,然后使用這個函數(shù)來傳遞它艳汽。

then(successFunc, errorFunc, notifyFunc):無論promise是成功了還是失敗了猴贰,當(dāng)結(jié)果可用之后,then都會立刻異步調(diào)用successFunc河狐,或者'errorFunc'米绕,在promise被執(zhí)行或者拒絕之前,notifyFunc可能會被調(diào)用0到多次甚牲,以提供過程狀態(tài)的提示义郑。

catch(errorFunc):拋出異常的時候,觸發(fā)該函數(shù).可以為整個then鏈提供一個統(tǒng)一異常處理.

finally(callback):總是會被執(zhí)行,不管 promise 被處理或者被拒絕丈钙,起清理作用?


1. 引用angular.js后,定義控制器,配置$q環(huán)境

<script?src="Scripts/jquery-1.9.1.js"></script>

<script>

????angular.module('myApp', []).controller('helloCtrl', ['$scope', '$q', '$timeout', function (scope, q, timeout) {


????}

</script>


2. 定義一個func函數(shù).

function?func() {

????var?defer = $q.defer();//創(chuàng)建1個defer對象

????var?promise = defer.promise;//獲取promise對象


????promise.then(function?(e) {

????????console.log('then1-success'?+ e);

????},?function?(e) {

????????console.log('then1-faild'?+ e);

????},?function?(e) {

????????console.log('then1-notice'?+ e);

????}).then(function?(e) {

????????console.log('then2-success'?+ e);

????????throw?"then2 exception";

????}).catch(function?(e) {

????????console.log('catch'?+ e);

????}).finally(function?(e) {

????????console.log('finally'?+ e);

????});

????defer.notify('通知1');

????defer.notify('通知2');

????defer.resolve('成功1');

????defer.reject('失敗1');

}

3. 觸發(fā)func函數(shù)(綁定到scope上即可觸發(fā))


補充說明

在執(zhí)行promise的resolve和reject方法時,表示異步結(jié)束.(所以此處沒顯示'失敗1')

then2中,e為undefined.原因是上個then方法中并沒有return對象.(同樣只能在successFunc, errorFunc中返回才有效)

如果上個then方法返回一個promise對象,則then2會在promise異步結(jié)束時才觸發(fā),并獲取到異步結(jié)果.


為了更好的說明,這里演示一下then返回promise的情況.

function?funcPromise() {

????var?defer = q.defer();

????var?promise = defer.promise;

????promise.then(function() {

????????var?thenDefer = q.defer();

????????timeout(function() {

????????????thenDefer.resolve('thenDefer 成功');

????????????//thenDefer.reject('thenDefer 失敗');//會觸發(fā)下個then的errorFunc

????????});

????????return?thenDefer.promise;

????}).then(function(e) {

????????console.log('then2-success'?+ e);

????},function(e) {

????????console.log('then2-faild'?+ e);

????});

????defer.resolve();

}


$q.all

$q.all()非驮,允許你等待并行的 promise 處理,當(dāng)所有的 promise 都被處理結(jié)束之后雏赦,調(diào)用共同的回調(diào)

scope.all =?function?() {

????q.all([getAjaxPromise(), getTimePromise()]).then(function?() {

????????console.log(arguments);

????});

}

getAjaxPromise 和?getTimePromise 函數(shù)都返回promise對象了


$q.when

$q.when(),可以將非promise標(biāo)準(zhǔn)的對象 提供給then函數(shù).

scope.when =?function() {

????q.when('hello').then(function(e) {

????????console.log(e);

????});


????q.when(getAjaxPromise()).then(function?(e) {

????????console.log(e);

????});

}

getAjaxPromise 是返回promise標(biāo)準(zhǔn)的 而'hello'是一個普通的字符

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末劫笙,一起剝皮案震驚了整個濱河市芙扎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌填大,老刑警劉巖戒洼,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異允华,居然都是意外死亡圈浇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門靴寂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磷蜀,“玉大人,你說我怎么就攤上這事百炬『致。” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵剖踊,是天一觀的道長庶弃。 經(jīng)常有香客問我,道長德澈,這世上最難降的妖魔是什么歇攻? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮梆造,結(jié)果婚禮上掉伏,老公的妹妹穿的比我還像新娘。我一直安慰自己澳窑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布供常。 她就那樣靜靜地躺著摊聋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栈暇。 梳的紋絲不亂的頭發(fā)上麻裁,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音源祈,去河邊找鬼煎源。 笑死,一個胖子當(dāng)著我的面吹牛香缺,可吹牛的內(nèi)容都是我干的手销。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼图张,長吁一口氣:“原來是場噩夢啊……” “哼锋拖!你這毒婦竟也來了诈悍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤兽埃,失蹤者是張志新(化名)和其女友劉穎侥钳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柄错,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡舷夺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了售貌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片给猾。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖趁矾,靈堂內(nèi)的尸體忽然破棺而出耙册,到底是詐尸還是另有隱情,我是刑警寧澤毫捣,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布详拙,位于F島的核電站,受9級特大地震影響蔓同,放射性物質(zhì)發(fā)生泄漏饶辙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一斑粱、第九天 我趴在偏房一處隱蔽的房頂上張望弃揽。 院中可真熱鬧,春花似錦则北、人聲如沸矿微。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涌矢。三九已至,卻和暖如春快骗,著一層夾襖步出監(jiān)牢的瞬間娜庇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工方篮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留名秀,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓藕溅,卻偏偏與公主長得像匕得,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蜈垮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Promise 對象 Promise 的含義 Promise 是異步編程的一種解決方案耗跛,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,702評論 1 56
  • 本文適用的讀者 本文寫給有一定Promise使用經(jīng)驗的人裕照,如果你還沒有使用過Promise,這篇文章可能不適合你调塌,...
    HZ充電大喵閱讀 7,299評論 6 19
  • 這個很早以前寫的晋南,今天看群里有人問關(guān)于promise的問題,在這里重新發(fā)一下羔砾。偷懶的同學(xué)可以直接拉到最后有完整的代...
    grain先森閱讀 2,908評論 1 9
  • 一负间、Promise的含義 Promise在JavaScript語言中早有實現(xiàn),ES6將其寫進(jìn)了語言標(biāo)準(zhǔn)姜凄,統(tǒng)一了用法...
    Alex灌湯貓閱讀 820評論 0 2
  • 一. Callback (回調(diào)函數(shù)) 1.定義:把函數(shù)當(dāng)作變量傳到另一個函數(shù)里愤诱,傳進(jìn)去之后執(zhí)行甚至返回等待之后的...
    hutn閱讀 1,518評論 0 2