最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序如何使用Promise對wx.request()封裝詳解(附完整代碼)

 更新時(shí)間:2023年03月13日 09:27:16   作者:coderYYY  
微信小程序的wx.request是微信小程序最早生成的數(shù)據(jù)庫傳輸模式,數(shù)據(jù)傳輸簡單明確,下面這篇文章主要給大家介紹了關(guān)于微信小程序如何使用Promise對wx.request()封裝的相關(guān)資料,需要的朋友可以參考下

1. 原生wx.request()的缺點(diǎn)

wx.request官網(wǎng)說明

  • 回調(diào)地獄,可能會(huì)出現(xiàn)多層success套用的情況(用Promise封裝解決)
  • 效率低,代碼冗雜,每次都要寫共同的參數(shù)(比如headers,公共的url)
  • 可維護(hù)性差,后續(xù)查看和改代碼不方便,封裝后都在同一個(gè)文件,一目了然
wx.request({
  url: 'example.php', //僅為示例,并非真實(shí)的接口地址
  data: {
    x: '',
    y: ''
  },
  header: {
    'content-type': 'application/json' // 默認(rèn)值
  },
  success (res) {
    console.log(res.data)
  }
})

作為一個(gè)合格的前端開發(fā),為了代碼質(zhì)量和可維護(hù)性(不是因?yàn)閼校?,肯定要對這種代碼進(jìn)行封裝,來讓我們的代碼變得更優(yōu)雅~~

2. 封裝思路

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

觀察我們的網(wǎng)絡(luò)請求代碼,可以發(fā)現(xiàn),有很多是一樣的,如公共請求路徑、對響應(yīng)錯(cuò)誤的處理方法、headers參數(shù)(如token)
不同的如具體的接口地址、請求類型、請求參數(shù),我們封裝的時(shí)候把相同的抽取成一個(gè)文件,不同的地方再進(jìn)行傳參即可。

3. 具體實(shí)現(xiàn)代碼

先建一個(gè)api文件夾(叫什么都可以,但是為了規(guī)范化),在下面新建文件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"
  };

  // 鑒權(quán)驗(yàn)證,獲取登錄之后后端返回的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, // 請求參數(shù)
      header: header, // 頭部
      success(res) {
        // 請求成功
        // 判斷狀態(tài)碼---errCode狀態(tài)根據(jù)后端定義來判斷
        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("未知錯(cuò)誤,請稍后再試");
        }
      },
      fail(err) {
        if (err.errMsg.indexOf('request:fail') !== -1) {
          wx.showToast({
            title: '網(wǎng)絡(luò)異常',
            icon: "error",
            duration: 2000
          })
        } else {
          wx.showToast({
            title: '未知異常',
            duration: 2000
          })
        }
        reject(err);
      },
      complete() {
        wx.hideLoading()
      },
    });
  });
};

module.exports = {
  apiUrl,
  request,
}

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

import {
  request
} from "./request"


// 用戶相關(guān)

// 登錄
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',
  })
}

正式在項(xiàng)目中使用:

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

總結(jié)

到此這篇關(guān)于微信小程序如何使用Promise對wx.request()封裝的文章就介紹到這了,更多相關(guān)微信小程序用Promise對wx.request()封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序轉(zhuǎn)化為uni-app項(xiàng)目的方法示例

    微信小程序轉(zhuǎn)化為uni-app項(xiàng)目的方法示例

    這篇文章主要介紹了微信小程序轉(zhuǎn)化為uni-app項(xiàng)目的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 使用JavaScript將PDF頁面中的標(biāo)注扁平化的操作指南

    使用JavaScript將PDF頁面中的標(biāo)注扁平化的操作指南

    扁平化(flatten)操作可以將標(biāo)注作為矢量圖形包含在PDF頁面的內(nèi)容中,使其不可編輯,Dynamsoft Document Viewer是一個(gè)用于文檔掃描和查看的JavaScript SDK,可以添加標(biāo)注、導(dǎo)出PDF,在本文中,我們將探討如何使用它,需要的朋友可以參考下
    2025-01-01
  • JavaScript+html5 canvas繪制繽紛多彩的三角形效果完整實(shí)例

    JavaScript+html5 canvas繪制繽紛多彩的三角形效果完整實(shí)例

    這篇文章主要介紹了JavaScript+html5 canvas繪制繽紛多彩的三角形效果,以完整實(shí)例形式分析了html5的canvas繪制圖形的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • 詳細(xì)解密jsonp跨域請求

    詳細(xì)解密jsonp跨域請求

    當(dāng)進(jìn)行一些比較深入的前端編程的時(shí)候,不可避免地需要進(jìn)行跨域操作,JSONP跨域GET請求是一個(gè)常用的解決方案,下面我們來看一下JSONP跨域是如何實(shí)現(xiàn)的,并且探討下JSONP跨域的原理。
    2015-04-04
  • js獲取瀏覽器地址(獲取第1個(gè)斜杠后的內(nèi)容)

    js獲取瀏覽器地址(獲取第1個(gè)斜杠后的內(nèi)容)

    這篇文章主要給大家介紹了關(guān)于js獲取瀏覽器地址(獲取第1個(gè)斜杠后的內(nèi)容)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • moment.js 時(shí)間日期處理詳解

    moment.js 時(shí)間日期處理詳解

    這篇文章主要介紹了moment.js 時(shí)間日期處理詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • HTML+JavaScript實(shí)現(xiàn)筋斗云導(dǎo)航欄效果

    HTML+JavaScript實(shí)現(xiàn)筋斗云導(dǎo)航欄效果

    這篇文章主要為大家介紹了如何利用HTML+JavaScript+CSS實(shí)現(xiàn)筋斗云導(dǎo)航欄效果,當(dāng)鼠標(biāo)經(jīng)過某個(gè)li,筋斗云跟著到當(dāng)前的位置,感興趣的小伙伴可以試一試
    2022-03-03
  • JS防止用戶多次提交的簡單代碼

    JS防止用戶多次提交的簡單代碼

    這篇文章介紹了JS防止用戶多次提交的簡單代碼,有需要的朋友可以參考一下
    2013-08-08
  • unicloud云開發(fā)進(jìn)階獲取首頁列表數(shù)據(jù)示例詳解

    unicloud云開發(fā)進(jìn)階獲取首頁列表數(shù)據(jù)示例詳解

    這篇文章主要為大家介紹了unicloud云開發(fā)進(jìn)階獲取首頁列表數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 小程序?qū)崿F(xiàn)自定義導(dǎo)航欄適配完美版

    小程序?qū)崿F(xiàn)自定義導(dǎo)航欄適配完美版

    這篇文章主要介紹了小程序?qū)崿F(xiàn)自定義導(dǎo)航欄適配完美版,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論

丹阳市| 城市| 荔波县| 乐都县| 西青区| 温宿县| 石屏县| 巩义市| 景东| 德化县| 德格县| 溧水县| 永川市| 娱乐| 斗六市| 富锦市| 哈尔滨市| 太保市| 荃湾区| 科技| 新宾| 合阳县| 同仁县| 蒲江县| 荆门市| 阿拉善盟| 松原市| 城步| 延长县| 恩施市| 伊通| 宜章县| 武乡县| 安龙县| 台州市| 个旧市| 苏尼特左旗| 孟州市| 湟中县| 宁武县| 闽清县|