剛入門,沒深究~ ?-答恶。-
經(jīng)典: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對象澳泵。