小程序网络请求的封装(二):引入promise进行封装

上一篇文章:小程序网络请求的封装(一):引入model分页面思想 www.jianshu.com/p/5c00ae741…

在之前的文章里,我们封装过小程序的http网络请求,现在我们基于前一篇文章引入promise,进行再次封装。首先,我们要明白为什么要引入promise进行封装呢?上一篇文章我们获取网络请求的异步回调结果用的是callbck函数的方式。这样其实有一个很不好的现象,就是封装的每一层都要传入callback回调函数,而如果我们用promise的方式的话,是不用层层传入的,只要一直return到上一层,直到在page页面你需要回调结果了,再获取这个promise对象,再通过promise对象的then方法获取网络请求的结果。

注:函数是不能保存状态的,而对象是能保存状态的,callcack是个回调函数,promise是个对象,所以callback方式需要层层传递,而promise方式不需要。

下面我们列出关键代码:

#目录结构:

一、http基类http-p.js代码:

import {config} from '../config.js'

class HTTP{

  //结果返回一个Promise对象

  request(params){

        return new Promise((resolve, reject)=>{

          if (!params.method) {

            params.method = "POST"

          }

          wx.request({

            url: config.api_base_url + params.url,

            method: params.method,

            data: params.data,

            header: {

              "Content-Type": "application/x-www-form-urlencoded;text/html; charset=utf-8"

            },

            success: (res) => {

              let code = res.data.result

              if (code == "0000") {

                resolve(res.data)

              }

              else {

                reject()

                this._show_error(res.data.msg)

              }

            },

            fail: (err) => {

              reject()

              this._show_error("无法访问服务器");

            }

          })

        })

    }

  _show_error(msg) {

    wx.showToast({

      title: msg,

      icon: 'none',

      duration: 2000

    })

  }

}

export {HTTP}
复制代码

二、具体网络请求类test-p.js

import {

  HTTP

}

  from '../util/http-p.js'

class TestPModel extends HTTP {

  getTest(code, providerId, providerKey) {



    return this.request({

      url: 'getOpenId.htm',

      data: {

        code: code,

        providerId: providerId,

        providerKey: providerKey

      }

    })

  }

}

export {

  TestPModel

}


复制代码

三、page页面具体调用

import {

  TestPModel

} from '../../models/test-p.js'

const testModel = new TestModel()

const testPModel = new TestPModel()

Page({

  /**

  * 页面的初始数据

  */

  data: {

  },

  /**

  * 生命周期函数--监听页面加载

  */

  onLoad: function (options) {

    testPModel.getTest("param1", "param2", "param3")

      .then((res) => {



      })



  },


复制代码

用promise封装也可以解决回调地狱的问题: 比如现在我们有多个网络请求,这几个网络请求是存在链式关系的,就是必须第一个网络请求完才能进行第二个、再第三个、第四个。。。。,如果我们用callback的形式进行封装,会出现如下图的结果:

但我们如果用promise进行网络请求:

这样每个网络请求是平行的,所以解决了回调地狱的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会为您详细解析微信小程序封装网络请求代码。 微信小程序中的网络请求有两种方式:一种是使用内置的wx.request()函数,另一种是使用第三方库进行封装。下面我们来介绍一下如何封装网络请求代码。 1. 创建一个request.js文件 首先,我们需要在项目目录下创建一个request.js文件。该文件用于封装网络请求代码。 2. 封装网络请求代码 在request.js文件中,我们可以使用Promise对象来封装网络请求代码。下面是一个基本的封装代码: ``` function request(url, method, data) { return new Promise((resolve, reject) => { wx.request({ url: url, method: method, data: data, success: function (res) { resolve(res.data); }, fail: function (error) { reject(error); } }) }) } module.exports = { request: request } ``` 上面的代码中,我们定义了一个request函数,它接受三个参数:url、method和data。其中,url表示请求的地址,method表示请求的方法(GET或POST),data表示请求的参数。 该函数返回一个Promise对象,当请求成功时,调用resolve方法并传递返回的数据;当请求失败时,调用reject方法并传递错误信息。 3. 在页面中使用封装代码 在页面中使用封装网络请求代码非常简单。我们只需要在页面的js文件中引入request.js文件,并调用request函数即可。下面是一个示例代码: ``` const request = require('../../utils/request.js'); Page({ data: { list: [] }, onLoad: function () { this.getList(); }, getList: function () { let url = 'https://xxx.xxx.xxx'; // 请求地址 let method = 'GET'; // 请求方法 let data = {}; // 请求参数 request.request(url, method, data) .then(res => { this.setData({ list: res }) }) .catch(error => { console.log(error); }) } }) ``` 上面的代码中,我们在onLoad函数中调用getList函数,该函数使用request函数发起网络请求。当请求成功时,将返回的数据存储到list中;当请求失败时,打印错误信息。 以上就是微信小程序封装网络请求代码的详细解析。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值