微信小程序promise封装wx.request()

一、promise使用及实现、async,await、generator函数的概念


Promise概念:
promise(首字母小写)对象指的是“Promise实例对象”

Promise首字母大写且单数形式,表示“Promise构造函数”

Promises首字母大写且复数形式,用于指代“Promises规范”

Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。

从语法上说,promise 是一个对象,从它可以获取异步操作的的最终状态(成功或失败)。

Promise是一个构造函数,对外提供统一的 API,自己身上有all、reject、resolve等方法,原型上有then、catch等方法。

 

async,await概念:

async+await是es7提出来的概念,它也是为了解决回调地狱的问题,它只是一种语法糖,从本质上讲,await函数仍然是promise,

值得注意的是,async和await必须要一起使用。

用法:首先在 function 前面加 async 用来说明这个函数是一个异步函数

 

generator函数的概念:
Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同。

Generator函数有多种理解角度。从语法上,首先可以把它理解成,Generator函数一个状态机,封装了多个内部状态。

执行Generator函数会返回一个遍历器对象,也就是说,Generator函数除了状态机,还是一个遍历器对象生成函数。

 

 

二、微信小程序之使用promise封装wx.request()

1.目录结构

首先在env目录下创建一个index.js文件,里面配置开发环境并将其导出

//配置不同的开发环境
module.exports={
  //开发环境
  Dev:{
    baseUrl:'http://123.207.32.32:8000/api/h8',
  },
  //测试环境
  Test:{
    baseUrl:'http://www.test.com'
  },
  //生产环境
  Prod:{
    baseUrl:'http://www.api.douban.com'
  }
}

进入http目录,在api.js中统一管理所有的url请求地址,方便后期的管理以及维护。

//定义请求路径并导出对象
module.exports={
  "banner":"/home/multidata",  //路径接口
  "list":"/home/list"
}

在demand.js文件中中发出一个request函数,该函数返回值是一个promise对象

//封装wx.request()网络模块

//先定一个函数 这个函数会返回一个promise对象
module.exports=(url,method,data)=>{
  let p=new Promise((resolve,reject)=>{
    wx.request({
      url: url,    //路径
      method:method,  //方式
      data:Object.assign({},data),   //请求的参数
      header:{"Content":"application/text"},  //请求头
        //成功的回调函数
      success(res){   
        resolve(res)
      },
         //失败的回调
      fail(err){    
        reject(err)
      }
    })
  })

  return p;
}

http.js,这个是入口文件,别人看到就知道此文件是干嘛用的

//入口函数,先导入环境变量,路径和方法在此处统一调用
const env=require('../env/index')  //导入的环境变量
const demand=require('./demand')   //封装的请求
const api=require('/api')         //封装的请求接口


//首先确定当前环境
let baseUrl=evn.Dev.baseUrl
//如果接口需要token,那么就获取token
let token=wx.getStorageSync('token') //获取本地存储的token

//请求的函数
//比如轮播图banner请求
function banner(){
  //调用该方法,传递路径(环境前缀+路径),方式,参数 函数结果会返回一个promise对象
  return Request(baseUrl+Url.banner,'get',{})
}
//其它请求 按照上一步写法写

//将封装好的请求发出
module.exports={
  banner,
}

最后一步咯,在全局app.js中导入index,注册到根组件

//app.js

//导入http请求模块
const http=require('./http/index')

//在App方法中挂载一个http方法,挂在上就可以使用
App({
  http,
})

怎么使用

//哪个文件要发送请求,就在头部引入app.js里面app这个全局对象
const app=getApp()
//使用方法简单粗暴,括号内可以传参数
app.http.banner().then(res=>{
	console.log(res)
})

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值