vue之 token和acync(await)

简介: vue之 token和acync(await)

1.token(令牌、凭据、身份证、入场券、房卡……)


1.1 是什么:


一个“令牌”(一串很长的字符串,由后端生成的),用来请求需要权限的接口时使用的。

有两个特点:

  • 它是由后端接口提供的
  • 一般在用户登陆时,由后端接口返回

1.2 保存token


token很重要啊,现实生活中,比如打开某视频网站,发现不登录不让看1080p的电影,或者不登录,而你想看某个东西,直接弹窗告诉你,先登录!正常情况,比如咱们登陆了,一般下次不用登陆了,这是因为保存了token。保存的方法主要有浏览器的本地存储localstorage。Cookie上面说到,保存token最常见的是:1.本地存储 2.cookie
  • 所有的组件都可以使用。   //    本地存储localstorage
  • 不是响应式的。
  • 刷新不会消失

而vuex 刷新会消失,但是是响应式的,所以他俩一结合,完美!  vuex+本地存储 (既保存在vuex中也保存到本地存储)

1.3.怎么用


1.用户登录的时候,获取token                //   后台给        不带token的访问会导致401错误

2.保存token到本地                                                             //本地存储

3.发起其他请求,携带token        //一般可用vuex的actions发起ajax请求+调用mutation(commit)提交修改state ----mutation是唯一有权限可以修改操作state的

image.png

image.png

2.axios拦截器


axios有一个请求拦截器机制,所有的axios请求在发出来之前都会经过 请求拦截器

image.png

格式:
// 请求拦截器
instance.interceptors.request.use(function (config) {
  console.log('config', config)
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})
实例:
// 请求拦截器1
instance.interceptors.request.use(function (config) {
  config.header.xxxx1 = 1000
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})
// 请求拦截器2
instance.interceptors.request.use(function (config) {
  config.header.xxxx2 = 'abc'
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

所以,token可以方便的通过拦截器发送出去

image.png

3.async(await) 【 Promise 对象、 Generator 函数】


3-1 先来说async


前提—————JavaScript是单线程,解释型脚本语言——  一行一行的从上到下依次执行

异步编程的最高境界,就是根本不用关心它是不是异步。

一句话,async 函数就是 Generator 函数的语法糖。

Promise到底是同步还是异步???——此坑待填。2021.6.6

是同步的,但是他的方法then是异步的 2021年8.20日,填坑

async await 个人理解:它是异步的——相对于外部其他代码而言。但如果是它内部的代码呢?答案:是同步的

什么意思呢?看下面的一段代码

我对async await 的理解:【2021年8.20日,补充】

我对async await 的理解:(是什么:async 函数就是 Generator 函数的语法糖,可以不背,面试不说),我们经常用它发请求,他是异步的,但是他的作用是将异步的操作转为同步的操作,举个例子,我们发请求给后台,是不是想要获得后台给的数据,等数据来了我们保存到数组,然后v-for渲染数组,就完成了页面渲染。我们知道,发请求是异步的,我们要的效果是,等这个操作结束以后,再把数据保存下来,这样看来,async await 是不是将异步操作转为同步了呢?  最后,记住一句核心,async await 重点是await(中文意思是等待),遇到await ,意味着,后面的代码不会执行,必须等await执行完才能执行后面的代码。举例子:await getLIst(getlist是封装的请求api),然后才执行后面的如 list = res.data  

<script>
      console.log(1)
      async function fn() {
        console.log(2)
        await settimeout(() => console.log(3),0) //进任务队列 1
        console.log(7)  //3个await最后执行,所以 7 9 优先
      }
      fn()
      async function foo() {
        console.log(4)
        await settimeout(() => console.log(5),0) //进任务队列 2
      }
      foo()
      console.log(6)
      async function qq() {
        await settimeout(() => console.log(8),0) //进任务队列 3
        console.log(9)
      }
      qq()
      //124679358
      //结论:同步最高 》async非await(在async控制范围的里面)》await
    </script>
console.log(1)                    // 1  肯定第一个打印,然后进入自执行函数,执行里面的代码
ascnc function(){
console.log(2)     
                               // 2   进来了,肯定第二个打印
await settimeout(fn,1000)
console.log(3)               //这里就有争议了,是先打印3还是先打印4
}() //就当他自执行函数
console。log(4)          //先打印4 ,最后打印3
最后的结果是1  2   4  3 
结论:1 2 正常同步执行,到3的时候,一看,我擦!await还要等,等白!在下JavaScript先忙活外面的兄弟4了,等把4兄弟送走了再来打印你哈,最后4也打印完了,再回过头来找3
---------------ok----继续---如果我换一换呢?--------------
console.log(1)                    // 1  肯定第一个打印,然后进入自执行函数,执行里面的代码
ascnc function(){
console.log(2)     
                               // 2   进来了,肯定第二个打印
await settimeout(fn,1000)
console.log(3)               //这里就有争议了,是先打印3还是先打印4
}() //就当他自执行函数
async btn() {await console.log(4)}         //先打印3 ,最后打印4
最后的的结果是1 2 3 4    
结论: 1  2 正常 ,到了 3 发现了await ,然后事件队列机制,去外面找同步代码,结果没有。只有另一个死异步,好吧,又把4那个异步放进红任务中,好了,大家都是异步,就按先来后到把,等3打印出来了,才轮到你4,要是3一直打印不出来,那么……就崩了----就好比你要执行for循环一万万亿次,js卒。(也就不能打印4了)

image.png

相关文章
|
14天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
31 1
vue学习第四章
|
14天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
27 1
vue学习第九章(v-model)
|
14天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
30 1
vue学习第十章(组件开发)
|
20天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
20天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
19天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
27 3
|
19天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
38 2
|
20天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
20天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
21天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。