一諾千金:微信小程序的wx.request 與Promise的結合使用


       因為js的異步回調機制,對於上一層數據的依賴,我們很可能會陷入回調地獄,因此我的代碼常常是這樣的:
 
ajax(url, function (res){
    ajax(res.url, function(res) {
        ajax(res.url, function(res) {
            if (res.status == '1') {
                ajax(res.url, function(res) {
                ...
                }
            }
            else if (res.status == '2') {
                ajax(url2, function(res) {
                ...
            }
            ...
        }
    }
}
);

       這種流程是很耗費心力並且脆弱的,體驗很糟糕,因此,在這次小程序的開發中為了更好的體驗,我開始使用了Promise.

代碼如下,這樣一來,當我們第二個請求需要第一個參數判斷時,可以不再陷入回調地獄,

// 小程序與后端情求接口
    let baseUrlPromise = 'https://xxx.com';
    // 定義方法返回Promise參數,obj 為wx.request 方法中所需參數
    let req = function (obj) {
      return new Promise(function (resolve, reject) {
        wx.request({
          url: baseUrlPromise + obj.url,
          data: obj.data,
          header: obj.header,
          method: obj.method == undefined ? "get" : obj.method,
          success: function (data) {
            // 回調成功執行resolve
            resolve(data)
          },
          fail: function (data) {
            // 回調失敗時
            if (typeof reject == 'function') {
              reject(data);
            } else {
              console.log(data);
            }
          },
        })
      })
    }
    // 執行req 方法,傳入第一個請求,
    let req1 = req({
      url: '第一次請求鏈接,與baseUrlPromise 相結合',
      data: {},
    })
    // 當需要多次請求時加入
    req1.then(function (data) {
      console.log('promiseThen1')
      console.log(data);
      return req({
        url: '第二次請求鏈接',
      })

    }).then(function (data) {

      console.log('promiseThen3')
      console.log(data);
      return req({
        url:'第三次請求鏈接'
      })
   }).then(......).catch(function(data){
      console.log(PromiseCatch)
   })

 當需要多次回調時,每次返回一個new Promise(),以此,代碼得以美觀,閱讀也更為便捷.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM