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

相关文章
|
1天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
1天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
6天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发
|
6天前
|
存储 JavaScript
Vue 状态管理工具vuex
Vue 状态管理工具vuex
|
12天前
|
JavaScript
如何在 Vue 中使用具名插槽
【10月更文挑战第25天】通过使用具名插槽,你可以更好地组织和定制组件的模板结构,使组件更具灵活性和可复用性。同时,具名插槽也有助于提高代码的可读性和可维护性。
15 2
|
12天前
|
JavaScript
Vue 中的插槽
【10月更文挑战第25天】插槽的使用可以大大提高组件的复用性和灵活性,使你能够根据具体需求在组件中插入不同的内容,同时保持组件的结构和样式的一致性。
14 2
|
12天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
存储 前端开发 JavaScript
为什么我不再用Vue,改用React?
当我走进现代前端开发行业的时候,我做了一个每位开发人员都要做的决策:选择一个合适的框架。当时正逢 jQuery 被淘汰,前端开发者们不再用它编写难看的、非结构化的老式 JavaScript 程序了。
|
14天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
14天前
|
缓存 JavaScript 搜索推荐
Vue SSR(服务端渲染)预渲染的工作原理
【10月更文挑战第23天】Vue SSR 预渲染通过一系列复杂的步骤和机制,实现了在服务器端生成静态 HTML 页面的目标。它为提升 Vue 应用的性能、SEO 效果以及用户体验提供了有力的支持。随着技术的不断发展,Vue SSR 预渲染技术也将不断完善和创新,以适应不断变化的互联网环境和用户需求。
31 9