小程式api充滿非同步回撥(callback),很多時候會進入令人抓狂的回撥地獄(callback hell) ,由於小程式對Javascript的proxy中介軟體不支援,我們採用資料劫持方法進行了promise封裝。
初步實現,歡迎指正。
/** * @author Sir.X * @describe 對小程式非同步方法進行promise封裝 * @date 2018.03.12 */const API = {};//遍歷wx進行封裝Object.keys(wx).forEach((key) => { if (key.substr(0, 2) !== 'on' && !/[\s\S]+Sync$/.test(key)) { Object.defineProperty(API, key, { // 獲取api get() { // 返回api對應函式 // obj 傳入的引數 return obj => { // 建立promise物件 return new Promise((resolve, reject) => { obj = obj || {}; obj.success = (...args) => { resolve(...args); } obj.fail = (...args) => { reject(...args); } obj.complete = (...args) => { // 空函式 } // 對wx物件的api進行呼叫,並且傳播promise狀態 wx[key](obj); }) } } }) } else { Object.defineProperty(API, key, { get() { return (...args) => { wx[key].apply(wx, args) } } }) }})export default API;複製程式碼
/** * @author Sir.X * @describe 對小程式非同步方法進行promise封裝 * @date 2018.03.12 */const API = {};//遍歷wx進行封裝Object.keys(wx).forEach((key) => { if (key.substr(0, 2) !== 'on' && !/[\s\S]+Sync$/.test(key)) { Object.defineProperty(API, key, { // 獲取api get() { // 返回api對應函式 // obj 傳入的引數 return obj => { // 建立promise物件 return new Promise((resolve, reject) => { obj = obj || {}; obj.success = (...args) => { resolve(...args); } obj.fail = (...args) => { reject(...args); } obj.complete = (...args) => { // 空函式 } // 對wx物件的api進行呼叫,並且傳播promise狀態 wx[key](obj); }) } } }) } else { Object.defineProperty(API, key, { get() { return (...args) => { wx[key].apply(wx, args) } } }) }})export default API;複製程式碼