Promise

本文介绍了Promise的基本概念,如何避免回调地狱,其三种状态(pending, fulfilled, rejected)的应用,以及如何在微信小程序和uniapp中封装网络请求。通过实例演示了Promise在封装Ajax和API请求中的实践。

Promise

  1. 什么是Promise?
    1.解决回调地狱
    2.可以链式调用
  2. 你对Promise的理解?
    有三种状态1.pending初始状态 2.fulfilled成功状态 3.rejected失败状态
  3. Promise用过吗?
    封装ajax.axios的get.post封装,微信小程序中封装wx.request(),uniapp开发中uni.request()

Promise名词约定

一般有三种名词约定:

  • promise(首字母小写)对象指的是"promise实例对象"
  • Promise 首字母大写且单数形式,表示"Promise构造函数"
  • Promises首字母大写且复数形式,用于指代"Promises规范"

什么是Promise

1.Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
2.聪语法上说,promise是一个对象,从它可以获取异步操作的最终状态(成功或失败)。
3.Promise是一个构造函数,对外提供统一的API,自己身上有all,reject,resolve等方法,原型上有then、catch等方法。

Promise的两个特点

1.Promise对象的状态不受外界影响
  1. pending 初始状态
  2. fulfilled 成功状态
  3. rejected 失败状态
    Promise有以上三种状态,只有异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个状态
2.Promise的状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可以逆,只能由pending变成fulfilled或者有pending变成rejected

小程序使用promise封装request请求

首先在根目录下创建一个文件夹,如我用的是http,然后在这个文件夹下创建一个js文件。这个js文件中写入

//封装微信网络请求模块 promise----》 wx.request()
export default (url,data,method)=>{ // 导出一个函数 函数中的 url是请求接口地址 data 是发送的参数 method 是请求方式
  return new Promise((resolve,rejects)=>{ // 返回一个 promise
    wx.request({
      url, //请求地址
      data, // 请求时携带的参数
      method, // 请求方式
      success(res){  // 请求成功指定的函数
        resolve(res); // 请求成功执行成功的回调,执行的是 then
      },
      fail(err){     // 请求失败执行的函数
        rejects()     // 请求失败执行的回调,执行的是 catch
      },
    })
  })
}

然后在创建一个js文件,如request.js文件,这个文件专门用来存放我们的请求接口的地址。代码如下

//接口地址 集合
export default {
  home:'/xxx',  // 这里写请求地址,一般我们写一个项目,baseUrl 是固定不变的,这时我们可以把后面那些不同的链接地址放到这里。
  list:'/list'  // 如这是列表页面请求的数据,
}

创建完这2个js后,我们可以在写一个js文件统一管理我们的请求。

//封装请求方法
import http from './http';   // 引入我们封装好的 wx.request 
import api from './request'; // 引入我们的请求接口  相当于引入了一个对象 如 {home:'/xxx',list:'/list}

let baseUrl = "http://xxx.xxx.com";   // 这里写我们请求地址共同的链接 

export default (data,method)=>{ // 导出
  return http(baseUrl+api.home,data,method); // 返回执行的函数 baseUrl+api 字符串拼接,拼接成完整的地址,data用来传参数,method用来定义请求方式
}

最后在我们项目根目录下的app.js文件中引入这个js文件即可

// app.js
import http from './http/api' // 引入我们封装的 wx.request
App({
  http  // 在这里挂载到属性上
})

然后哪个页面使用就在对应的js文件内引入

const app = new getApp() //引入我们的 app.js文件

   /** 生命周期函数--监听页面加载
   */
  onLoad: function () {
    app.http({},'get').then(res=>{  // 直接调用app中的方法即可 ,第一个参数可以向服务器传递参数,第二个参数是请求方式
      console.log(res);
    })  
  },

这样我们的封装就完成了

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值