Vue--day04--vue的异步请求

Vue--day04--vue的异步请求
Vue--day04--vue的异步请求

2.Promise的then

  • then 方法 一定会 返回一个 新的 Promise 对象
    • 如果 then 中的 回调函数 return 了一个 Promise对象,则 返回这个 对象
    • 如果 then 中的 回调函数 return 了一个 非Promise对象数据,则 自动创建新Promise对象,并将数据传入
let p1 = new Promise(function (resolve, reject) {
      let age = 1;
      if (age > 10) resolve && resolve('年龄大于10了哦')
      else reject && reject('呀,年龄不够呀~~')
    })
    .then(function (data) {
        let p2 = new Promise(function (resolve, reject) {
            setTimeout(function () {
                resolve(123);
            }, 1000)
        });
        return p2;
    })
    .then(function (data) { // 此then 是调用了 p2 对象的(p2.then)
        // 如果 返回普通数据,则 内部会自动创建一个promise对象
        // let p3 = new Promise(function (resolve, reject) {
        //   resolve('hello')
        // })
        // return p3

        return 'hello';
    })
    .then(function (data) { // 此then是调用了then方法内部自动创建的 Promise对象p3
        console.log(data)
    })

3.Promise的 catch/finally

  • catch 将 Promise对象的 失败回调函数 解耦,单独传递,语法上 更好看
  • finally 不管 结果是 成功还是失败,都将要最后执行!
let p1 = new Promise(function (resolve, reject) {
      let age = 1;
      if (age > 10) resolve && resolve('年龄大于10了哦')
      else reject && reject('呀,年龄不够呀~~')
    })
    .then(function (data) {  // 给 resolve 参数传回调函数
        
    })
    .catch(function (data) {  // 给 reject 参数传回调函数
        
    })
    .finally(function () {
        
    })

4.Promise构造函数的方法

  • Promise.all()
  • Promise.race()
    let pm1 = new Promise(function (okcb, errcb) {
      setTimeout(function () {
        okcb('第1批货物已经 上岸了')
      }, 2000)
    })

    let pm2 = new Promise(function (okcb, errcb) {
      setTimeout(function () {
        okcb('第2批货物已经 上岸了')
      }, 5000)
    })

    let pm3 = new Promise(function (okcb, errcb) {
      setTimeout(function () {
        okcb('第3批货物已经 上岸了')
      }, 3000)
    })

    //all 方法 接收 多个 任务,并 返回一个 promise对象
    //                       通过 返回的promise对象.then 方法 获取 所有任务的返回值数组
    Promise.all([pm2, pm3, pm1]).then(function (resArr) {
      console.log('三批货安全到岸:', resArr)
    })

    //race 方法 接收 多个 任务,并 返回一个 promise对象
    //                        通过 返回的promise对象.then 方法 获取 第一个完成的任务返回值
    // 【注意】 不管谁先完成,剩下的 也会坚持执行完毕
    Promise.race([pm1, pm2, pm3]).then(function (res) {
       console.log('有一批货安全到岸,快跑:', res)
    })

Vue--day04--vue的异步请求

// 通过 返回的 Promise对象 的 then 方法 获取 响应报文体对象 res
fetch('http://localhost:3000/fdata')
    .then(function (res) { // res 是 服务器返回的 响应报文 封装成的 对象
    // 通过 res.text() 获取 一个新的 promise对象,内部才包含 响应报文体的 内容文本
    return res.text();
})
.then(function (textStr) { // 返回的 promise对象的 then方法 ,接收 响应报文体的 内容文本
    console.log(textStr);
})
// POST请求传参 键值对传参------------------------------------
fetch('http://localhost:3000/books', {
  method: 'post',
  body: 'uname=lisi&pwd=123',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})
.then(function (data) {
    return data.text();
}).then(function (data) {
    console.log(data)
});

6.axios

相当于 一个 没有 dom操作的 jquery,只提供异步请求方法!

6.1 请求方式 - get

  • 查询字符串
axios.get('http://www.yaoniub.com?id=1').then(function(res){
    console.log(res.data)
})

axios.get('http://www.yaoniub.com',{params:{ id:1 ,cate:'x'}}).then(function(res){
    console.log(res.data)         // http://www.yaoniub.com?id=1&cate=x
})
  • 动态参数
axios.get('http://www.yaoniub.com/1').then(function(res){
    console.log(res.data)
})

Vue--day04--vue的异步请求

6.2 请求方式 -post

  • JSON
axios.post('http://www.zhenniubi.com',{id:1,name:'xmomo'}).then(function(res){
    res.data // 响应报文体数据
})
  • urlencoded(键值对)
axios.post('http://www.zhenniubi.com','id=1&name=xmomo').then(function(res){
    res.data // 响应报文体数据
})

let params = new URLSearchParams();
params.append('id', '1');
axios.post('http://www.zhenniubi.com',params).then(function(res){
    res.data // 响应报文体数据
})

6.3 公共配置

  • timeout 设置超时时间
  • baseURL 设置基地址
  • header 设置请求报文头 字段
axios.defaults.timeout = 2000

// 配置请求的基准URL地址
axios.defaults.baseURL = 'http://localhost:3000/';

// 配置请求头信息
axios.defaults.headers['Authorization'] = 'bearer token字符串';

// http://localhost:3000/axios-json 
axios.get('axios-json').then(function (ret) {
    console.log(ret.data.uname)
})

6.4 拦截器

  • 请求拦截器:发送请求报文前 对 报文做最后的修改
  • 响应拦截器:接收到响应报文后 立即 对 报文 做抢先修改
  • Vue--day04--vue的异步请求
 // 1.请求拦截器 ---------------------------------------------
// 执行时机:在生成请求报文 之后,发送 请求报文之前 调用
axios.interceptors.request.use(function (req) {
  req.headers.mytoken = 'nihao';
  // 返回 请求报文配置对象
  return req;
}, function (err) {
  console.log(err)
})

// // 2.响应 拦截器 --------------------------------------------
axios.interceptors.response.use(function (res) {
  // 将 响应报文对象 的 报文体数据 返回(传给了 axios.then 的 参数)
  return res.data;
}, function (err) {
  console.log(err)
})

// 3.发送请求: 发送请求之前会经过 请求拦截器,接收响应报文后 会先经过 响应拦截器
axios.get('http://localhost:3000/adata').then(function (data) {
  console.log(data)
})
上一篇:Day04-Java集合-ArrayList的使用


下一篇:day04-Linux文件管理&vim编辑器概述