ionic2頁面回傳值,關于Typescript的Promise承諾

剛入門,沒深究~ ?-。-

經典:javascript Promise介紹?來自谷歌的說明,簡單直觀

來自谷歌

Promise 構造函數(shù)接受一個函數(shù)作為參數(shù),該函數(shù)的兩個參數(shù)分別是 resolve 方法和 reject 方法。如果異步操作成功,則用 resolve 方法將 Promise 對象的狀態(tài),從「未完成」變?yōu)椤赋晒Α梗磸?pending 變?yōu)?resolved);如果異步操作失敗,則用 reject 方法將 Promise 對象的狀態(tài),從「未完成」變?yōu)椤甘 梗磸?pending 變?yōu)?rejected)。


來自谷歌

then()有兩個參數(shù),一個成功案例的回調,另一個是失敗的情況。兩者都是可選的,因此您可以為成功或失敗的情況添加回調。


來自谷歌


來自谷歌

這是一個很好的例子,如果能夠獲取到對應url的xml請求,則req.status=200,在if中可以執(zhí)行你想做出的操作,并執(zhí)行resolve(req.response),其中req.response是請求得到的結果,如果找不到則返回req.status=404,并reject()返回錯誤。

在ionic2中,頁面回傳值的方法:

同上所描述那般

做出一個承諾


來自tc

將該方法作為一個參數(shù)傳入push的頁面中

注意:最開始我本來是采用如下圖方式的,但是很不幸,出現(xiàn)了問題,問題所在就是關于這個this的作用域問題。這里要用到ES6的箭頭函數(shù) Arrow Functions。普通function函數(shù)和箭頭函數(shù)的行為有一個微妙的區(qū)別,箭頭函數(shù)沒有它自己的this值,箭頭函數(shù)內的this值繼承自外圍作用域。


來自tc

回傳值,將需要傳過去的指丟入contactsCallback中,即將數(shù)據(jù)從該頁面?zhèn)鞯缴弦粋€頁面中,并且then后,通過是執(zhí)行了resolve()還是reject()來識別是否成功,如果成功,pop掉當前頁面,否則輸出錯誤。

來自tc



參考文章:JavaScript進階之路——認識和使用Promise,重構你的Js代碼?了解Promise

一直以來,JavaScript處理異步都是以callback的方式。近幾年隨著JavaScript開發(fā)模式的逐漸成熟,CommonJS規(guī)范順勢而生,其中就包括提出了Promise規(guī)范,Promise完全改變了js異步編程的寫法,讓異步編程變得十分的易于理解。

1.什么是Promise

所謂Promise,字面上可以理解為“承諾”,就是說A調用B,B返回一個“承諾”給A,然后A就可以在寫計劃的時候這么寫:當B返回結果給我的時候,A執(zhí)行方案S1,反之如果B因為什么原因沒有給到A想要的結果,那么A執(zhí)行應急方案S2,這樣一來,所有的潛在風險都在A的可控范圍之內了。

Promise規(guī)范如下:

一個promise可能有三種狀態(tài):等待(pending)、已完成(fulfilled)、已拒絕(rejected)

一個promise的狀態(tài)只可能從“等待”轉到“完成”態(tài)或者“拒絕”態(tài),不能逆向轉換,同時“完成”態(tài)和“拒絕”態(tài)不能相互轉換

promise必須實現(xiàn)then方法(可以說,then就是promise的核心),而且then必須返回一個promise,同一個promise的then可以調用多次,并且回調的執(zhí)行順序跟它們被定義時的順序一致

then方法接受兩個參數(shù),第一個參數(shù)是成功時的回調,在promise由“等待”態(tài)轉換到“完成”態(tài)時調用,另一個是失敗時的回調,在promise由“等待”態(tài)轉換到“拒絕”態(tài)時調用。同時,then可以接受另一個promise傳入,也接受一個“類then”的對象或方法,即thenable對象。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容