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

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

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

來自谷歌

Promise 構造函數接受一個函數作為參數,該函數的兩個參數分別是 resolve 方法和 reject 方法。如果異步操作成功,則用 resolve 方法將 Promise 對象的狀態,從「未完成」變為「成功」(即從 pending 變為 resolved);如果異步操作失敗,則用 reject 方法將 Promise 對象的狀態,從「未完成」變為「失敗」(即從 pending 變為 rejected)。


來自谷歌

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


來自谷歌


來自谷歌

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

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

同上所描述那般

做出一個承諾


來自tc

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

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


來自tc

回傳值,將需要傳過去的指丟入contactsCallback中,即將數據從該頁面傳到上一個頁面中,并且then后,通過是執行了resolve()還是reject()來識別是否成功,如果成功,pop掉當前頁面,否則輸出錯誤。

來自tc



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

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

1.什么是Promise

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

Promise規范如下:

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

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容