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

相关文章
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
287 2
|
28天前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
261 137
|
5月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
736 0
|
5月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
4月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
390 1
|
4月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
237 0
|
5月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
265 1
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
1225 0
|
7月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
974 4
|
6月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
786 77