目录

Promise

普通函数和回调函数

Promise 简介

Promise 基本用法

async 和 await 的使用

Axios 介绍

Axios 入门案例

Axios 的 get 和 post 方法

Axios 拦截器

完!


Promise

普通函数和回调函数

普通函数:正常调用的函数,一般函数执行完毕后才会继续执行下一行代码

回调函数:一种基于事件的,自动调用,未来会执行的函数。其他的代码不会等待回调函数执行完毕。

举个例子:那年,你和女神风华正茂

        承诺:考完试之后,一起去吃麻辣烫~  ---->  function(){ }

        1. 进行中 ---> 其他代码继续执行 (不会影响你和女神备考的行为)

        2. 成功    --->   准备好成功时处理的预案(找一家好吃的麻辣烫~)

        3. 失败    --->  准备好失败时处理的预案(找一个没人注意的墙角偷偷抹泪~)

Promise 就是一个方便我们自己设置一个回调函数的 API

Promise 简介

前端中的异步编程技术,类似 Java 中的多线程 + 线程结果回调

Promise,简单来说就是一个容器,里面保存着某个未来才会结束的事件的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的信息。Promise 提供统一的 API,可以异步操作都可以用同样的方法进行处理。

Promise 对象有以下两个特点:

        1. Promise 对象代表一个异步操作,有三种状态:Pending(进行中),Resolved(已完成),和 Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态。

        2. 一旦状态改变,就不会再发生变化。

Promise 基本用法

    <script>let promise = new Promise(function (resolve, reject) {console.log("promise do some code.....")resolve("promise success")})// 等待 promise 对象状态发生变化时才会执行的代码promise.then(function (value) {// promise 转换为 resolved 状态时 会执行的函数console.log('promise success' + value)}).catch(function (value) {// promise 转换为 reject 会执行的函数console.log("promise fail" + value)})console.log('other code1')console.log("other code 2")</script>

async 和 await 的使用

async 表示函数的:

        1. async 标识函数后,async 函数的返回值会编程一个 Promise 对象

        2. 如果函数内部返回的数据是一个非 Promise 对象,async 函数的记过会返回一个成功状态的 Promise 对象

        3. 如果函数内部返回的是一个 Promise 对象,则 async 函数返回的状态与结果由该对象决定

        4. 如果函数内部抛出的是一个异常,则 async 函数返回一个失败的 Promise 对象

        5. async 其实就是帮助我们用简洁的语法来获得一个 promise 对象~

    <script>async function fun1() {// return 10// throw new Error("somthing wrong")let promise = Promise.reject("hehe")return promise}let promise = fun1()promise.then(function(value){console.log("success" + value)}).catch(function(value){console.log("fail" + value)})</script>

await:

        1. await 右侧的表达式一般为一个 Promise 对象,但也可以是一个其他值

        2. 如果表达式是 Promise 对象,await 返回的是 Promise 成功的值

        3. 如果表达式是其他的值,则直接返回该值

        4. 如果表达式是一个失败状态的 promise,那么 await 会直接抛异常

        5. await 会等右边的 Promise 对象执行结束,然后再获取结果,所在方法的后续代码也会继续等待 await 执行

        6. await 必须在 async 函数中,但是 async 函数中可以没有 await

        7. await 其实就算给我们提供了一个快捷获得 Promise 对象成功状态的语法

    <script>async function fun1() {return 10}async function fun2() {// let res = await fun1() // 会返回一个 10 普通值let res = await Promise.reject("something wrong")console.log("await got" + res)}fun2()</script>

Axios 介绍

AJAX:

我们在前面提到了 AJAX,AJAX 可以在步重新加载整个页面的情况下,与服务器交换数据,并更新部分网页内容。前面我们使用 XMLHttpRequest 只是实现 Ajax 的一种方式,本次我们使用 Vue Axios 方式来实现。

Axios 入门案例

案例需求:请求后台获取随机土味情话

请求的 URL:https://api.uomg.com/api/rand.qinghua

请求的方式: GET/POST

数据返回的格式:{"code":1,"content":"我努力不是未来"}

2. 准备项目

npm create vite@4.3.2

npm i

npm i axios

<script setup>import axios from 'axios'import {ref,reactive} from 'vue'let message = reactive({"code":1,"content":"88888"})function getLoveMessage(){// 使用 axios 发送请求// axios({设置请求的参数}) 请求三要素:1. 请求的 url 2. 请求的方式 3. 请求的参数let promise = axios({url:'https://api.uomg.com/api/rand.qinghua',method:'get',data:{// 当请求的方式为 post 的时候,data 中的数据会以 JSON 串形式放入请求体,否则会以keyvalue 的形式放在 url 后}})promise.then(function (response) {console.log(response)// response 响应结果对象// data 服务端响应回来的数据// status 响应状态码 200// headers 本次响应所有的响应头// request 本次请求发送时使用的 XMLHttpRequest 对象// message.code = response.data.code// message.content=response.data.contentObject.assign(message,response.data) // 这个函数会将后面这个对象的同名属性值赋值给前面对象的同名属性值}).catch(function(error){console.log(error)})}// axios 可以简写function getLoveWords() {return axios({url:'https://api.uomg.com/api/rand.qinghua',method:'post',data:{}})}//  简化1// function getLoveMessage2() {//   let promise = getLoveWords()//   promise.then(//     function(response){//       Object.assign(message,response.data)//     }//   )// }// // 简化2
//     async function getLoveMessage2(){
//       let response = await getLoveWords()
//       Object.assign(message, response.data)
//     }//简化3async function getLoveMessage2() {// let {data} 为对象结构赋值语法,从一个对象中提取指定的元素let {data} = await getLoveWord()Object.assign(message,response.data)}
</script><template><div><h1 v-text="message"></h1><button @click="getLoveMessage()">change</button></div>
</template><style scoped>
</style>

Axios 的 get 和 post 方法

配置添加语法:

测试 axios 的get 方法:

<script setup type="module">
import axios from 'axios'
import { onMounted, reactive } from 'vue';
let jsonData = reactive({code:1, content:'我努力不是为了你而是因为你'})let getLoveWords = async () => {try {return await axios.get('https://api.uomg.com/api/rand.qinghua',{params: { // 向url后添加的键值对参数format: 'json',username: 'zhangsan',password: '123456'},headers: { // 设置请求头'Accept': 'application/json, text/plain, text/html,*/*'}})} catch (e) {return await e}
}let getLoveMessage = async () => {let { data } = await getLoveWords()Object.assign(jsonData, data)
}/* 通过onMounted生命周期,自动加载一次 */
onMounted(() => {getLoveMessage()
})
</script><template><div><h1>今日土味情话:{{jsonData.content}}</h1><button @click="getLoveMessage">获取今日土味情话</button></div>
</template><style scoped>
</style>

测试 axios 的post 方法:

<script setup type="module">
import axios from 'axios'
import { onMounted, reactive } from 'vue';
let jsonData = reactive({code:1, content:'我努力不是为了你而是因为你'})
let getLoveWords = async () => {try {return await axios.post('https://api.uomg.com/api/rand.qinghua',{ // 请求体中的JSON数据username: 'zhangsan',password: '123456'},{ // 其他参数params: { // url上拼接的键值对参数format: 'json'},headers: { // 请求头'Accept': 'application/json, text/plain, text/html,*/*','X-Requested-With': 'XMLHttpRequest'}})} catch (e) {return await e}
}
let getLoveMessage = async () => {let { data } = await getLoveWords()Object.assign(jsonData, data)
}
/* 通过onMounted生命周期,自动加载一次 */
onMounted(() => {getLoveMessage()
})
</script><template><div><h1>今日土味情话:{{jsonData.content}}</h1><button @click="getLoveMessage">获取今日土味情话</button></div>
</template><style scoped>
</style>

Axios 拦截器

在 axios 发送请求之前,或者是数据想赢回来执行 then 方法之前做一些工作,可以使用拦截器完成:

App.vue:

<script setup>import request from './axios'import {reactive} from 'vue'let message = reactive({"code":1,"content":xxxxxxxx,})function getLoveWord(){return request.post("https://api.uomg.com/api/rand.qinghua")}async function getLoveMessage() {let {data} = await getLoveWord()Object.assign(message,response.data)}</script><template><div><h1 v-text="message"></h1><button @click="getLoveMessage()">change</button></div>
</template><style scoped>
</style>

axuis.js:

import axios from 'axios'// 使用 axios 函数创建一个可以发送请求的实例对象
const instance = axios.create({})// 设置请求拦截器
instance.interceptors.request.use((config) => {console.log('请求前拦截器')// 请求之前,设置请求信息的方法config.headers.Accept="application/json,text/plain,text/html,*/*"// 设置完毕后 必须要返回 configreturn config},function(error) {console.log("请求前拦截器异常方法")// 返回一个失败状态的 promisereturn Promise.reject("something wrong")}
)instance.interceptors.response.use(//响应状态码为 200 要执行的方法// 处理相应数据// 最后要返回 responsefunction(response){console.log("reponse success:")console.log(response)return response},function(error) {console.log("response fail")console.log(error)// 最后一定要响应一个 promisereturn Promise.reject("something wrong")}
)//默认导出 instance
export default instance

完!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98510.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98510.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/98510.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么选适合企业的RPA财务机器人?

对于大多数财务人来说&#xff0c;“月初月末就是噩梦”已经成了常态&#xff1a;一边要面对堆积如山的单据和报表&#xff0c;一边还要应付领导不断加码的工作&#xff0c;常常忙到深夜&#xff0c;却总觉得自己陷在重复事务中难有成长。其实&#xff0c;这并不是个体问题&…

html css js网页制作成品——HTML+CSS无穷网页设计(5页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML

AUTOSAR进阶图解==>AUTOSAR_SWS_PDURouter

AUTOSAR PDU Router详解文档 AUTOSAR通信架构中的核心路由模块目录 1. 概述2. PDU Router模块架构3. PDU Router配置模型4. PDU Router路由流程5. PDU Router状态机6. 总结 1. 概述 PDU Router模块是AUTOSAR通信架构中的核心组件&#xff0c;负责在AUTOSAR软件组件之间路由I-…

RHEL7.9、RHEL9.3——源码安装MySQL

目录 一、环境部署 1. 克隆rhel7.9虚拟机 二、源码安装MySQL 1. 准备工作 2. 源码部署mysql8.0.40 1&#xff09;安装编译mysql所需软件包 2&#xff09;编译安装mysql8.0.40 3&#xff09;生成启动脚本 一、环境部署 1. 克隆rhel7.9虚拟机 改名为 “RHEL79_mysql_master” 并…

解决Win11 安全中心删掉存在隐患的工具

打开设置&#xff0c; 找到Windows安全中心&#xff0c;找到病毒和威胁防护&#xff0c;选择排除项&#xff0c;点 添加或删除排除项添加文件&#xff0c;文件夹&#xff0c;工具按照自己需求选择。或&#xff0c;删除文件注意&#xff1a;隐患的工具或者文件安装或者用完&…

通过URI Scheme实现从Web网页上打开本地C++应用程序(以腾讯会议为例,附完整实现源码)

目录 1、需求描述 2、选择URI Scheme实现 3、何为URI Scheme&#xff1f; 4、将自定义的URL Scheme信息写入注册表的C源码实现 5、如何实现最开始的3种需求 6、后续需要考虑的细节问题 之前陆续收到一些从Web页面上启动我们C客户端软件的需求&#xff0c;希望我们能提供一…

机器学习02——模型评估与选择(过拟合与欠拟合、K折交叉验证、均方误差、混淆矩阵)

上一章&#xff1a;机器学习01——机器学习概述 下一章&#xff1a;机器学习03——线性模型 机器学习实战项目&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大学生就业 / 竞赛必备 文章目录一、经验误差与过拟合&#xff08;一&a…

基于 Django 与 Bootstrap 构建的现代化设备管理平台

整体步骤概览 创建项目和应用设计模型&#xff08;Model&#xff09; - 定义设备的数据结构配置用户认证&#xff08;Auth&#xff09; - 使用 Django 自带的强大用户系统创建视图&#xff08;View&#xff09; - 处理业务逻辑&#xff1a;登录、列表、增删改查编写模板&#x…

微软依旧稳定发挥,Windows 最新更新性能「开倒车」

微软在前不久为Release Preview测试用户推送了最新Windows11 25H2版本。按照惯例&#xff0c;正式版将于9月或者10月与咱们见面。虽然看起来是个跨版本的大更新&#xff0c;但是更新方式将服务堆栈更新&#xff08;SSU&#xff09;与最新累积更新&#xff08;LCU&#xff09;。…

一手实测,文心x1.1的升级很惊喜啊

一手实测&#xff0c;文心x1.1的升级很惊喜啊 前言 月9日&#xff0c;在 WAVE SUMMIT深度学习开发者大会上 百度发布了一个新的思考模型文心x1.1&#xff1a; X1 Turbo 升级为 X1.1 了。 文心4.5 Turbo 和 X1 Turbo 是2025年4月25日发布的&#xff0c;距今已经半年过去了&…

Flask 核心基础:从 路由装饰器 到 __name__ 变量 的底层逻辑解析

Flask 核心基础&#xff1a;从路由装饰器到 name 变量的底层逻辑解析 在使用 Flask 开发 Web 应用时&#xff0c;我们总会从 app Flask(__name__) 和 app.route("/") 这两行代码开始。看似简单的语法背后&#xff0c;藏着 Python 装饰器机制与 Flask 框架设计的核心…

中国AI云市场报告:阿里云份额达35.8%,高于2至4名总和

9月9日&#xff0c;国际权威市场调研机构英富曼&#xff08;Omdia&#xff09;发布《中国AI云市场&#xff0c;1H25》报告&#xff0c;报告显示&#xff0c;2025年上半年&#xff0c;中国AI云市场规模达223亿元&#xff0c;阿里云占比35.8%位列第一&#xff0c;市场份额高于2到…

鸿蒙Next开发指南:UIContext接口解析与全屏拉起元服务实战

前言在鸿蒙应用开发过程中&#xff0c;我们经常会遇到需要获取UI上下文实例或者在非UI上下文中调用UI相关方法的场景。随着HarmonyOS NEXT的不断发展&#xff0c;UIContext API为我们提供了更加优雅的解决方案。本文将详细介绍如何使用UIContext中对应的接口获取与实例绑定的对…

leaflet读取mvt格式

如图所示&#xff0c;是全国的数据&#xff0c;截图是部分数据先安装&#xff1a;npm install leaflet npm install leaflet.vectorgrid如果是其余的框架直接用就行&#xff1a;import * as L from leaflet; import leaflet.vectorgrid;我用的是angular,所以是ts中声明&#xf…

OSG中交互(鼠标、键盘)处理

OpenSceneGraph (OSG) 中的交互处理,包括鼠标和键盘事件。 一、OSG 事件处理体系 OSG 使用一个基于访问者模式的事件处理体系,核心类包括: osgGA::GUIEventHandler: 所有事件处理器的基类 osgViewer::Viewer: 查看器,管理事件队列和分发 osgGA::EventQueue: 事件队列…

微硕双N-MOS管WST3392在汽车智能氛围灯系统中的应用

汽车智能氛围灯系统是现代车辆提升驾乘体验的重要配置&#xff0c;其多通道LED的精密调光与控制需选用高性能、小体积的功率开关器件。微硕WINSOK的WST3392是一款双N沟道MOS管&#xff0c;具有30V耐压、3.7A连续电流和46mΩ的低导通电阻&#xff0c;特别适用于氛围灯系统中的多…

深入 Kubernetes:从零到生产的工程实践与原理洞察

&#x1f31f; Hello&#xff0c;我是蒋星熠Jaxonic&#xff01; &#x1f308; 在浩瀚无垠的技术宇宙中&#xff0c;我是一名执着的星际旅人&#xff0c;用代码绘制探索的轨迹。 &#x1f680; 每一个算法都是我点燃的推进器&#xff0c;每一行代码都是我航行的星图。 &#x…

为何三折叠手机只有华为可以?看华为Mate XTs非凡大师就知道

9月4日&#xff0c;华为在深圳举行华为Mate XTs非凡大师及全场景新品发布会&#xff0c;不同于过往手机发布会对芯片配置只字不提&#xff0c;此次发布会公开展示了华为Mate XTs非凡大师内部芯片配置——麒麟9020芯片&#xff0c;时隔四年&#xff0c;终于在发布会上看到芯片公…

TensorFlow 2.x 核心 API 与模型构建

TensorFlow 2.x 核心 API 与模型构建TensorFlow 是一个强大的开源机器学习库&#xff0c;尤其在深度学习领域应用广泛。TensorFlow 2.x 在易用性和效率方面做了大量改进&#xff0c;引入了Keras作为其高级API&#xff0c;使得模型构建和训练更加直观和便捷。本文将介绍 TensorF…

TENGJUN防水TYPE-C连接器:工业级防护,认证级可靠,赋能严苛场景连接

在工业控制、户外电子、水下设备等对连接稳定性与防护性要求极致的场景中&#xff0c;TENGJUN防水TYPE-C连接器以“硬核性能全面认证”的双重优势&#xff0c;成为关键连接环节的信赖之选。从结构设计到认证标准&#xff0c;每一处细节都为应对复杂环境而生&#xff0c;重新定义…