剛入門,沒深究~ ?-。-
經典: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中,頁面回傳值的方法:
同上所描述那般
做出一個承諾

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

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

參考文章: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對象。