中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序怎么使用Promise對wx.request()封裝

發布時間:2023-03-13 10:55:50 來源:億速云 閱讀:109 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“微信小程序怎么使用Promise對wx.request()封裝”,內容詳細,步驟清晰,細節處理妥當,希望這篇“微信小程序怎么使用Promise對wx.request()封裝”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

1. 原生wx.request()的缺點

wx.request官網說明

  • 回調地獄,可能會出現多層success套用的情況(用Promise封裝解決)

  • 效率低,代碼冗雜,每次都要寫共同的參數(比如headers,公共的url)

  • 可維護性差,后續查看和改代碼不方便,封裝后都在同一個文件,一目了然

wx.request({
  url: 'example.php', //僅為示例,并非真實的接口地址
  data: {
    x: '',
    y: ''
  },
  header: {
    'content-type': 'application/json' // 默認值
  },
  success (res) {
    console.log(res.data)
  }
})

作為一個合格的前端開發,為了代碼質量和可維護性(不是因為懶),肯定要對這種代碼進行封裝,來讓我們的代碼變得更優雅~~

2. 封裝思路

所有的封裝思路(無論是組件還是邏輯代碼),總結起來一句話就是抽取共性

觀察我們的網絡請求代碼,可以發現,有很多是一樣的,如公共請求路徑、對響應錯誤的處理方法、headers參數(如token)
不同的如具體的接口地址、請求類型、請求參數,我們封裝的時候把相同的抽取成一個文件,不同的地方再進行傳參即可。

3. 具體實現代碼

先建一個api文件夾(叫什么都可以,但是為了規范化),在下面新建文件request.js

// ----http----
// api URL
const apiUrl = "https://接口地址:端口";// 公共的請求地址
// 封裝微信請求方法
const request = (params) => {
  let url = params.url;
  let data = params.data;
  let method = params.method;
  let header = {
    "Content-Type": "application/json"
  };

  // 鑒權驗證,獲取登錄之后后端返回的token,存在即在頭部Authorization寫token,具體的看后端需求
  if (wx.getStorageSync("token")) {
    // header.Authorization = wx.getStorageSync("token");
    header.token = wx.getStorageSync("token");
  }
  return new Promise((resolve, reject) => {
    wx.request({
      url: apiUrl + url, // api url
      method: method, // get/post
      data: data, // 請求參數
      header: header, // 頭部
      success(res) {
        // 請求成功
        // 判斷狀態碼---errCode狀態根據后端定義來判斷
        if (res.statusCode < 399) {
          if (res.data.Code === 401) {
            wx.showModal({
              title: "提示",
              content: "請登錄",
              showCancel: false,
              success(res) {
                wx.navigateTo({
                  url: "/pages/login/login",
                });
              },
            });
            reject(res.data);
          }
          resolve(res.data);
        } else {
          // 其他異常
          switch (res.statusCode) {
            case 404:
              wx.showToast({
                title: '未知異常',
                duration: 2000,
              })
              break;
            default:
              wx.showToast({
                title: '請重試...',
                duration: 2000,
              })
              break;
          }
          reject("未知錯誤,請稍后再試");
        }
      },
      fail(err) {
        if (err.errMsg.indexOf('request:fail') !== -1) {
          wx.showToast({
            title: '網絡異常',
            icon: "error",
            duration: 2000
          })
        } else {
          wx.showToast({
            title: '未知異常',
            duration: 2000
          })
        }
        reject(err);
      },
      complete() {
        wx.hideLoading()
      },
    });
  });
};

module.exports = {
  apiUrl,
  request,
}

然后再按業務需求,對具體的接口地址進行封裝,比如,我這里在api文件夾下再新建一個user.js文件,里面放登錄,注冊的一些方法,請求類型和請求參數根據接口文檔寫。

import {
  request
} from "./request"


// 用戶相關

// 登錄
export const login = (params) => {
  return request({
    url: '/user/login',
    data: params,
    method: 'POST',
  })
}
// 注冊
export const register = (params) => {
  return request({
    url: '/user/reg',
    data: params,
    method: 'POST',
  })
}

正式在項目中使用:

import {
  login
} from '../../../api/user'
// 點擊登錄的方法
handleLogin(){
    login({
      name: xxx,
      password: xxx,
    }).then((res) => {
      if (res.code == 200) {
   		// 登錄成功之后的處理
      } else {
		// 登錄失敗的處理
      }
    }).catch((res) => {})
}

讀到這里,這篇“微信小程序怎么使用Promise對wx.request()封裝”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新河县| 峨边| 佛教| 偏关县| 博白县| 香格里拉县| 阳高县| 广西| 平顶山市| 二手房| 南丹县| 黔东| 平江县| 新泰市| 察哈| 中阳县| 资中县| 庆城县| 紫云| 包头市| 庐江县| 宁明县| 绥宁县| 同德县| 全州县| 泾源县| 泸水县| 万安县| 呼玛县| 墨江| 定安县| 敖汉旗| 双柏县| 浠水县| 滦平县| 乳源| 鹤山市| 长子县| 广河县| 长乐市| 两当县|