亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

Angular中的Promise對象($q介紹)

2024-05-06 16:15:48
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Angular中的Promise對象($q介紹),本文講解了Promise模式、Q Promise的基本用法、AngularJs中的$q.defferd等內容,需要的朋友可以參考下
 

在用JQuery的時候就知道 promise 是 Js異步編程模式的一種模式,但是不是很明白他跟JQuery的deferred對象有什么區別。隨著公司項目的進行,要跟后臺接數據了,所以決定搞定它。

Promise

Promise是一種模式,以同步操作的流程形式來操作異步事件,避免了層層嵌套,可以鏈式操作異步事件。

我們知道,在編寫javascript異步代碼時,callback是最最簡單的機制,可是用這種機制的話必須犧牲控制流、異常處理和函數語義化為代價,甚至會讓我們掉進出現callback大坑,而promise解決了這個問題。

ES6中Promise、angularJS內置的AngularJS內置Q,以及when采用的都是Promises/A規范,如下:

每個任務都有三種狀態:未完成(pending)、完成(fulfilled)、失敗(rejected)。

1.pending狀態:可以過渡到履行或拒絕狀態。
2.fulfilled狀態:不能變為其他任何狀態,而且狀態不能改變,必須有value值。
3.rejected狀態:不能變為其他任何狀態,而且狀態不能改變,必須有reason。

狀態的轉移是一次性的,狀態一旦變成fulfilled(已完成)或者failed(失敗/拒絕),就不能再變了。

 

復制代碼代碼如下:

function okToGreet(name){
    return name === 'Robin Hood';
}
 
function asyncGreet(name) {
    var deferred = $q.defer();
 
    setTimeout(function() {
     // 因為這個異步函數fn在未來的異步執行,我們把代碼包裝到 $apply 調用中,一邊正確的觀察到 model 的改變
        $scope.$apply(function() {
            deferred.notify('About to greet ' + name + '.');
 
            if (okToGreet(name)) {
                deferred.resolve('Hello, ' + name + '!');
            } else {
                deferred.reject('Greeting ' + name + ' is not allowed.');
            }
        });
    }, 1000);
 
    return deferred.promise;
}
 
var promise = asyncGreet('Robin Hood');
promise.then(function(greeting) {
    alert('Success: ' + greeting);
}, function(reason) {
    alert('Failed: ' + reason);
}, function(update) {
    alert('Got notification: ' + update);
});

 

Q Promise的基本用法

上面代碼表示, $q.defer() 構建的 deffered 實例的幾個方法的作用。如果異步操作成功,則用resolve方法將Promise對象的狀態變為“成功”(即從pending變為resolved);如果異步操作失敗,則用reject方法將狀態變為“失敗”(即從pending變為rejected)。最后返回 deferred.promise ,我們就可以鏈式調用then方法。

JS將要有原生Promise,ES6中已經有Promise對象,firefox和Chrome 32 beta版本已經實現了基本的Promise API

AngularJs中的$q.defferd

通過 調用 $q.defferd 返回deffered對象以鏈式調用。該對象將Promises/A規范中的三個任務狀態通過API關聯。

deffered API

deffered 對象的方法

1.resolve(value):在聲明resolve()處,表明promise對象由pending狀態轉變為resolve。
2.reject(reason):在聲明resolve()處,表明promise對象由pending狀態轉變為rejected。
3.notify(value) :在聲明notify()處,表明promise對象unfulfilled狀態,在resolve或reject之前可以被多次調用。

deffered 對象屬性

promise :最后返回的是一個新的deferred對象 promise 屬性,而不是原來的deferred對象。這個新的Promise對象只能觀察原來Promise對象的狀態,而無法修改deferred對象的內在狀態可以防止任務狀態被外部修改。

Promise API

當創建 deferred 實例時會創建一個新的 promise 對象,并可以通過 deferred.promise 得到該引用。

promise 對象的目的是在 deferred 任務完成時,允許感興趣的部分取得其執行結果。

promise 對象的方法

1.then(errorHandler, fulfilledHandler, progressHandler):then方法用來監聽一個Promise的不同狀態。errorHandler監聽failed狀態,fulfilledHandler監聽fulfilled狀態,progressHandler監聽unfulfilled(未完成)狀態。此外,notify 回調可能被調用 0到多次,提供一個進度指示在解決或拒絕(resolve和rejected)之前。
2.catch(errorCallback) —— promise.then(null, errorCallback) 的快捷方式
3.finally(callback) ——讓你可以觀察到一個 promise 是被執行還是被拒絕, 但這樣做不用修改最后的 value值。 這可以用來做一些釋放資源或者清理無用對象的工作,不管promise 被拒絕還是解決。 更多的信息請參閱 完整文檔規范.

通過then()方法可以實現promise鏈式調用。

 

復制代碼代碼如下:

promiseB = promiseA.then(function(result) {  
  return result + 1;  
});  
 
// promiseB 將會在處理完 promiseA 之后立刻被處理,  
// 并且其  value值是promiseA的結果增加1

 

$q的其他方法

$q.when(value):傳遞變量值,promise.then()執行成功回調
$q.all(promises):多個promise必須執行成功,才能執行成功回調,傳遞值為數組或哈希值,數組中每個值為與Index對應的promise對象


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九热r在线视频精品| 亚洲天堂色网站| 亚洲精品午夜精品| 日韩视频在线一区| 26uuu亚洲国产精品| 在线视频免费一区二区| 91在线观看免费观看| 中文字幕亚洲一区| 亚洲一区二区中文| yellow中文字幕久久| 欧美超级乱淫片喷水| 日本久久久久久| 国内精品久久久久| 国产性猛交xxxx免费看久久| 久久久久久中文| 亚洲男人第一网站| 九九久久国产精品| 久久久久免费视频| 精品国产欧美一区二区五十路| 国产精品国产三级国产aⅴ9色| 日韩视频永久免费观看| 久久久久久久香蕉网| 91成人福利在线| 91精品中国老女人| 国产精品成人观看视频国产奇米| 2018日韩中文字幕| 国产成人精品免高潮费视频| 亚洲成人精品av| 亚洲欧美日韩图片| 国产欧美最新羞羞视频在线观看| 成人高清视频观看www| 欧美午夜片欧美片在线观看| 狠狠综合久久av一区二区小说| 国产成人综合精品在线| 久久久91精品国产| 欧美大片在线影院| 欧美第一黄网免费网站| 亚洲精品成人久久电影| 亚洲最大的免费| 欧美理论片在线观看| 亚洲女成人图区| 国产美女久久久| 亚洲视频一区二区三区| 国产精品欧美日韩久久| 亚洲片在线观看| 92国产精品久久久久首页| 精品爽片免费看久久| 久久久国产一区二区三区| 久久伊人精品天天| 欧美成人免费va影院高清| 国产精品av在线播放| 亚洲影视九九影院在线观看| 欧美激情一级二级| 奇米成人av国产一区二区三区| 国产专区精品视频| 欧美肥臀大乳一区二区免费视频| 韩剧1988免费观看全集| 欧美一区二区三区免费视| 国内精品400部情侣激情| 成人黄色av免费在线观看| 久久夜精品va视频免费观看| 亚洲欧美一区二区三区在线| 精品国产一区二区三区久久| 日韩亚洲在线观看| 成人亲热视频网站| 亚洲国产精品99久久| 精品国产欧美一区二区三区成人| 日本精品va在线观看| 亚洲精品大尺度| 国产精品三级网站| 久久精品视频免费播放| 国产欧美在线看| 日韩在线视频网站| 亚洲自拍偷拍区| 成人国内精品久久久久一区| 精品久久香蕉国产线看观看亚洲| 国产一区二区成人| 国产精品久久久久久av| 久久久噜噜噜久噜久久| 亚洲欧美国产日韩中文字幕| 亚洲精品国产精品国自产在线| 久久久久久久久爱| 97精品国产97久久久久久| 久久五月情影视| 亚洲精品久久久久久久久| 欧美高清性猛交| 久久精品99久久久久久久久| 啊v视频在线一区二区三区| 岛国av在线不卡| 久久久久久久成人| 久99久在线视频| 精品亚洲男同gayvideo网站| 欧美日韩国产页| 亚洲国产高潮在线观看| 一本色道久久综合狠狠躁篇的优点| 精品二区三区线观看| 欧美激情高清视频| 日韩av影院在线观看| 97超碰蝌蚪网人人做人人爽| 日本91av在线播放| 欧日韩在线观看| 亚洲人精选亚洲人成在线| 一本久久综合亚洲鲁鲁| 久久久在线免费观看| 91免费看国产| 欧美性做爰毛片| 高跟丝袜一区二区三区| 亚洲性av在线| 中文字幕久热精品视频在线| 亚洲精品ady| 91沈先生作品| 97不卡在线视频| 日韩av电影国产| 在线电影av不卡网址| 久青草国产97香蕉在线视频| www国产91| 色播久久人人爽人人爽人人片视av| 81精品国产乱码久久久久久| 国产精品久久久久久久久久久新郎| 欧美性极品少妇精品网站| 国产欧美精品xxxx另类| 97视频免费在线看| 亚洲永久免费观看| 最近2019中文字幕在线高清| 在线观看久久av| 久久久久久中文字幕| 欧美日韩中国免费专区在线看| 久久精品国产一区二区三区| 日本精品中文字幕| 日韩精品视频中文在线观看| 国产视频福利一区| 亚洲视频电影图片偷拍一区| 青青在线视频一区二区三区| 国产精品高清在线观看| 92版电视剧仙鹤神针在线观看| 亚洲欧美激情在线视频| 久久久www成人免费精品| 久久琪琪电影院| 国产69精品久久久久9| 亚洲老头同性xxxxx| 国模视频一区二区三区| 一本色道久久88亚洲综合88| 一区二区三区在线播放欧美| 97视频在线观看免费高清完整版在线观看| 久久免费视频网| 欧美三级欧美成人高清www| 亚洲成人1234| 国产黑人绿帽在线第一区| 日韩欧美福利视频| 久久理论片午夜琪琪电影网| 日韩欧美国产黄色| 色偷偷噜噜噜亚洲男人| 久久久免费观看视频| 亚洲午夜久久久久久久| 日韩久久免费电影| 国产在线不卡精品| 国内精品久久久久影院优| 亚洲男人7777| 中文字幕欧美亚洲| 日韩中文字幕网址| 欧美精品日韩www.p站| 91精品免费久久久久久久久| 2024亚洲男人天堂| 91老司机精品视频|