關於Promise層層巢狀可讀性差問題
阿新 • • 發佈:2018-12-14
Promise 是非同步程式設計的一種解決方案,比傳統的解決方案——回撥函式和事件——更合理和更強大。它由社群最早提出和實現,ES6 將其寫進了語言標準,統一了用法,原生提供了
Promise
物件
ES6 規定,
Promise
物件是一個建構函式,用來生成
Promise
例項。
我們先來看看它的使用方法:
1 const promise = new Promise(function(resolve, reject) { 2 // ... some code 這裡寫非同步操作程式碼3 ajax(api1,function(res){ 4 // 非同步操作成功,請求資料成功 5 resolve(value);//將promise設定為resolved(完成狀態) 6 },function(error){ 7 // 非同步操作失敗,請求資料失敗 8 reject(error);////將promise設定為rejected (失敗狀態) 9 }) 10 11 });
resolve
函式的作用是 在非同步操作成功時呼叫,並將非同步操作的結果,作為引數傳遞出去;
reject
Promise
例項生成以後,可以用
then
方法分別指定
resolved
狀態和
rejected
狀態的回撥函式。
promise.then(function(value) { // success }, function(error) { // failure });
then
方法可以接受兩個回撥函式作為引數。第一個回撥函式是Promise
物件的狀態變為resolved
時呼叫,第二個回撥函式是Promise
物件的狀態變為rejected
時呼叫。其中,第二個函式是可選的,不一定要提供。這兩個函式都接受Promise
物件傳出的值作為引數。
promise.then(function(value) { // success }).catch(function(error){ //error })
promise.then(function(value) { // success ajax(api2,function(res){ }) }).catch(function(error){ //error })
像是這樣 new Promise(ajax1).then(ajax2).catch() ,使用了鏈式呼叫代替了巢狀結構,這樣就避免了層層巢狀使的程式碼可讀性太差!