小程式API進行promise封裝

MrZx發表於2018-03-12

小程式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;複製程式碼


相關文章