《深入理解ES6》——Promise非同步程式設計
阿新 • • 發佈:2018-12-14
Promise的生命週期
每個promise都會經歷一個短暫的生命週期:先是處於進行中(pending)的狀態,此時操作尚未完成,所以它也是未處理(unsettled)的;一旦非同步操作執行結束,Promise則變為已處理(settled)的狀態。已處理的狀態又分為以下兩種:
- Fulfilled Promise非同步操作成功完成
- Rejected 由於程式錯誤或其他一些原因,Promise非同步操作未能成功完成。
then()方法
所有Promise都有then()方法,它接受兩個引數:第一個是當Promise的狀態變為fulfilled時要呼叫的函式,與非同步操作相關的附加資料都會傳遞給這個完成函式;第二個
then()的兩個引數都是可選的,可以按照任意組合的方式來監聽Promise,執行完成或被拒絕都會被響應。來看下面例項:
let promise = readFile("example.txt"); promise.then(function(contents){ //完成 console.log(contents); },function(err){ //拒絕 console.error(err.message); }); promise.then(function(contents){ //完成 console.log(contents); }); promise.then(null,function(err){ //拒絕 console.error(err.message); });
上面這3次then()呼叫操作的是同一個Promise。第一個同時監聽了執行完成和執行被拒;第二個只監聽了執行完成,錯誤時不報告;第三個只監聽了執行被拒,成功時不報告。
Promise還有一個catch()方法,相當於只傳入拒絕處理程式的then()方法。如下,catch()方法和then()方法實現的功能是等價的:
promise.catch(function(err){ //拒絕 console.error(err.message); }); //與以下呼叫相同 promise.then(null,function(err){ //拒絕 console.error(err.message); });