【JavaScript】网络请求之Promise fetch Axios及异步处理

Promise

Promise 表示承诺在未来的某个时刻可能会完成并返回结果,对于某些需要时间来处理结果的操作, 如用户登录、读取文件等, 可以使用 Promise 对象来执行异步操作
Promise 对象有三种状态 pending(待处理)、fulfilled(已履行)、rejected(被驳回)。

  • 当创建一个 Promise 对象时, 它的初始状态为 pending, 表示异步执行还未完成;
  • 当异步执行成功时, 会调用 resolve 函数把 Promise 对象的状态改变为 fulfilled, 可通过 then 方法来获取异步操作的结果;
  • 当异步执行异常时, 会调用 reject 函数把 Promise 对象的状态更改为 rejected, 可通过 catch 方法来处理错误。

注:异步操作是指在程序执行过程中, 某个操作不会立即返回结果, 而是需要一段时间的等待

let promise = new Promise((resolve, reject) => {})
//当创建一个 Promise 对象时, 它的初始状态为 pending, 表示异步执行还未完成
console.log("promise:", promise) //pending
let promise = new Promise((resolve, reject) => {resolve("邮件发送成功") //异步执行成功
})
//当异步执行成功时, 会调用 resolve 函数把 Promise 对象的状态改变为 fulfilled, 可通过 then 方法来获取异步操作的结果
console.log("promise:", promise) //fulfilledpromise.then(result => {console.log("result:", result)
})
let promise = new Promise((resolve, reject) => {reject("邮件发送失败") //异步执行失败
})
//当异步执行失败时, 会调用 reject 函数把 Promise 对象的状态更改为 rejected, 可通过 catch 方法来处理错误
console.log("promise:", promise) //rejectedpromise.catch(error => {console.log("error:", error)
})
// resolve为自定义的执行成功后的函数
// reject为自定义的执行失败后的函数
let promise = new Promise((resolve, reject) => {//resolve("邮件发送成功")reject("邮件发送失败")
}).then(result => {console.log("result:", result)
}).catch(error => {console.log("error:", error)
}).finally(() => {console.log("异步执行结束")
})

fetch

fetch是基于Promise的api, 它可以发送http请求并接收服务器返回的响应数据,fetch 返回的是一个Promise对象。

//get请求
fetch('http://127.0.0.1/get').then(response => {//返回的解析后的json数据会传递给下一个 then() 方法中的回调函数作为参数,这个参数就是 datareturn response.json() //response.json() 用于将响应数据解析为json格式的数据
}).then(data => { //data 解析后的json数据console.log("get.data:", data)
}).catch(error => {console.log("get.error:", error.message)
}).finally(() => {console.log("get.finally")
})
//post请求 post
fetch('http://127.0.0.1/post', {method: 'POST',headers: {'Content-Type': 'application/x-www-form-urlencoded'},            body: new URLSearchParams({//URLSearchParams 用于处理键值对类型的数据,并将其编码为url查询字符串name: '小明',web: 'baidu.com',}),
}).then(response => {return response.json()
}).then(data => {console.log("post.data:", data)
}).catch(error => {console.log("post.error:", error.message)
}).finally(() => {console.log("post.finally")
})//post请求 postJson
fetch('http://127.0.0.1/postJson', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({//JSON.stringify 用于将对象转换为json字符串name: '小明',web: 'baidu.com',}),
}).then(response => {return response.json()
}).then(data => {console.log("postJson.data:", data)
}).catch(error => {console.log("postJson.error:", error.message)
}).finally(() => {console.log("postJson.finally")
})

Axios

Axios 是基于 Promise 的网络请求库, 它可以发送http请求并接收服务器返回的响应数据Axios返回的是一个Promise对象,Axios不仅可以用于浏览器, 也可以用于Node.js, 而Fetch主要用于浏览器。

//get请求
axios.get('http://127.0.0.1/get').then(response => {console.log("get.data:", response.data)
}).catch(error => {console.log("get.error:", error)
}).finally(() => {console.log("get.finally")
})
//post请求 post
let data = { //参数name: '小明',web: 'baidu.com',
}axios.post('http://127.0.0.1/post', data, {headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(response => {console.log("post.data:", response.data)
}).catch(error => {console.log("post.error:", error)
}).finally(() => {console.log("post.finally")
})//post请求 postJson [axios 的默认请求头是 application/json]
axios.post('http://127.0.0.1/postJson', data).then(response => {console.log("postJson.data:", response.data)
}).catch(error => {console.log("postJson.error:", error)
}).finally(() => {console.log("postJson.finally")
})

asycn await

同步:代码按照编写顺序逐行执行,后续的代码必须等待当前正在执行的代码完成之后才能执行。当遇到耗时的操作(如网络请求等)时,主线程会被阻塞,直到该操作完成。
异步:当遇到耗时的操作发生时, 主线程不会被阻塞, 主线程会继续执行后续的代码, 而非等待耗时操作完成。
async:当一个函数被标记为async后, 该函数会返回一个Promise对象。
await:只能在async函数内部使用, 加上await关键字后, 会在执行到这一行时暂停函数的剩余部分,等待网络请求完成,然后继续执行并获取到请求返回的数据。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="axios/dist/axios.min.js"></script>
</head><body><script>//回调地狱是指过度使用嵌套的回调函数,导致代码难以阅读和维护//get请求axios.get('http://127.0.0.1/get').then(response => {console.log("get.data:", response.data)if (response.data.data.web == "baidu.com") {//get请求2return axios.get('http://127.0.0.1/article/get/id/1').then(response2 => {console.log("get2.data:", response2.data)if (response2.data.data.name == "邓瑞") {//get请求3return axios.get('http://127.0.0.1/article/get/search/title/入门').then(response3 => {console.log("get3.data:", response3.data)})}})}}).catch(error => {console.log("get.error:", error)}).finally(() => {console.log("get.finally")})//async/await 使用同步的方式编写异步代码, 避免回调地狱//优势 在处理多个异步操作的情况下, 可以使代码更简洁易读const getData = async () => {try {//get请求const response = await axios.get('http://127.0.0.1/get')console.log("async.get.data:", response.data)if (response.data.data.web === "baidu.com") {//get请求2const response2 = await axios.get('http://127.0.0.1/article/get/id/1')console.log("async.get2.data:", response2.data)if (response2.data.data.name === "小明") {//get请求3const response3 = await axios.get('http://127.0.0.1/article/get/search/title/入门')console.log("async.get3.data:", response3.data)}}} catch (error) {console.log("async.get.error:", error)} finally {console.log("async.get.finally")}}getData()</script>
</body>
</html>

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

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

相关文章

isc-dhcp-server

#dhcps #安装 apt install isc-dhcp-server #topo # 创建命名空间 ip netns add ns #创建veth接口 ip link add ns-veth0 type veth peer name h-veth0 #ns-veth0放入命名空间 ip link set ns-veth0 netns ns #配置ns的接口 ip -netns ns link set ns-veth0 up ip -netns ns …

网络安全技术及其在企业中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 网络安全技术及其在企业中的应用 网络安全技术及其在企业中的应用 网络安全技术及其在企业中的应用 引言 网络安全技术概述 定义…

《深度学习神经网络:颠覆生活的魔法科技与未来发展新航向》

深度学习神经网络对我们生活的影响 一、医疗领域 深度学习神经网络在医疗领域的应用可谓意义重大。在疾病诊断方面&#xff0c;它能够精准分析医疗影像&#xff0c;如通过对大量的 CT、MRI 图像进行深度学习&#xff0c;快速准确地识别出微小的肿瘤病变&#xff0c;为医生提供…

【综合案例】使用React编写B站评论案例

一、效果展示 默认效果&#xff0c;一开始默认按照最热进行排序 发布了一条评论 按照最新进行排序 按照最新进行排序 二、效果说明 页面上默认有3条评论&#xff0c;且一开始进入页面的时候是按照点赞数量进行倒序排列展示&#xff0c;可以点击【最热 、最新】进行排序的切换。…

python包管理工具pip和conda的使用对比

python包管理工具pip和conda的使用对比 总述1. pip使用2. conda注意虚拟环境之间的嵌套&#xff0c;这个会导致安装包后看不到包&#xff0c;实际是安装到了base环境里 未完待续 总述 pip相对于conda,对应包的依赖关系管理不强&#xff0c;坏处是容易造成包冲突&#xff0c;好…

Github 2024-11-09Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-09统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10CUE项目1Python项目1Polars: Rust中的DataFrame接口和OLAP查询引擎 创建周期:1354 天开发语言:Rust, Python协议类型:MIT License…

CNN和MobileNetV2搭建的水果识别模型

一、 概述 1. 项目背景 水果是人们日常生活中重要的食品之一&#xff0c;其营养丰富、口感美味、色香俱佳&#xff0c;因此备受广大消费者的喜爱。 然而&#xff0c;在市场上&#xff0c;各种不同品种的水果琳琅满目&#xff0c;对于人类的肉眼识别来说并不容易实现。传统的检…

GEE 图表——ATom:气象测量系统(MMS)的测量数据,2016-2018 年

目录 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 ATom: Measurements from Meteorological Measurement System (MMS), 2016-2018 简介 该数据集包含气象测量系统&#xff08;MMS&#xff09;仪器在四次 ATom 活动中的测量数据。 气象测量系统是一种最先进的仪器…

一文解秘Rust如何与Java互操作

本博客所有文章除特别声明外&#xff0c;均采用CC BY-NC-SA 4.0许可协议。转载请注明来自 唯你 使用场景 JAVA 与 Rust 互操作让 Rust 可以背靠 Java 大生态来做更多事情&#xff0c;而 Java 也可以享受 Rust 语言特性的内存安全&#xff0c;所有权机制&#xff0c;无畏并发。…

信息安全工程师(82)操作系统安全概述

一、操作系统安全的概念 操作系统安全是指操作系统在基本功能的基础上增加了安全机制与措施&#xff0c;从而满足安全策略要求&#xff0c;具有相应的安全功能&#xff0c;并符合特定的安全标准。在一定约束条件下&#xff0c;操作系统安全能够抵御常见的网络安全威胁&#xff…

微服务系列四:热更新措施与配置共享

目录 前言 一、基于Nacos的管理中心整体方案 二、配置共享动态维护 2.1 分析哪些配置可拆&#xff0c;需要动态提供哪些参数 2.2 在nacos 分别创建共享配置 创建jdbc相关配置文件 创建日志相关配置文件 创建接口文档配置文件 2.3 拉取本地合并配置文件 2.3.1 拉取出现…

线程级耗时统计工具类TimeWatcher

线程级耗时统计工具类TimeWatcher 先看效果 假设我们的业务代码逻辑是这样的 那么最终的日志打印效果为&#xff08;注&#xff1a;此为美化输出&#xff0c;也可设置为常规一行输出&#xff0c;还可自定义&#xff09; 2024-11-08T23:48:53.39008:00 INFO 31472 --- [nio-…

arkUI:Flex弹性布局的各个属性

arkUI&#xff1a;Flex弹性布局的简单使用 1 主要内容说明2 相关内容2.1 Flex弹性布局的方向2.1.1 源码1的简答说明2.1.2 源码1 &#xff08;Flex弹性布局的方向&#xff09;2.1.3 源码1运行效果2.1.3.1 当direction: FlexDirection.RowReverse2.1.3.2 当direction: FlexDirect…

详解Gemini API的使用:在国内实现大模型对话与目标检测教程

摘要&#xff1a;本博客介绍了如何利用Gemini API实现多轮对话和图像目标检测识别功能&#xff0c;在Python中快速搭建自己的大模型完成实际任务。通过详细的步骤解析&#xff0c;介绍了如何申请Gemini API密钥&#xff0c;调用API、对话实现的代码&#xff0c;给出了上传图片识…

5G时代已来:我们该如何迎接超高速网络?

内容概要 随着5G技术的普及&#xff0c;我们的生活似乎变得更加“科幻”了。想象一下&#xff0c;未来的智能家居将不仅仅是能够听你说“开灯”&#xff1b;它们可能会主动询问你今天心情如何&#xff0c;甚至会推荐你一杯“维他命C芒果榨汁”&#xff0c;帮助你抵御夏天的炎热…

算法每日练 -- 双指针篇(持续更新中)

介绍&#xff1a; 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff08;左右指针&#xff09;&#xff0c;一种是快慢指针&#xff08;前后指针&#xff09;。需要注意这里的双指针不是 int* 之类的类型指针&#xff0c;而是使用数组下标模拟地址来进行遍历的方式。 …

理解鸿蒙app 开发中的 context

是什么 Context是应用中对象的上下文&#xff0c;其提供了应用的一些基础信息&#xff0c;例如resourceManager&#xff08;资源管理&#xff09;、applicationInfo&#xff08;当前应用信息&#xff09;、dir&#xff08;应用文件路径&#xff09;、area&#xff08;文件分区…

贝尔不等式,路径积分与AB(Aharonov-Bohm)效应

贝尔不等式、路径积分与Aharonov-Bohm&#xff08;AB&#xff09;效应 这些概念分别源于量子力学不同的理论分支和思想实验&#xff0c;但它们都揭示了量子力学的奇异性质&#xff0c;包括非局域性、相位效应和波粒二象性。以下详细解析每一概念&#xff0c;并探讨其相互联系。…

python 爬虫 入门 六、Selenium

Selenium本来是一个自动测试工具&#xff0c;用于模拟用户对网站进行操作。在爬虫领域也有其用处。 一、下载安装Selenium及附属插件 pip install Selenium 安装完成后还需要安装一个浏览器驱动&#xff0c;来让python能启动浏览器。 如果是Edge或者其他基于Chromium的浏览器…

Linux(CentOS)yum update -y 事故

CentOS版本&#xff1a;CentOS 7 事情经过&#xff1a; 1、安装好CentOS 7&#xff0c;系统自带JDK8&#xff0c;版本为&#xff1a;1.8.0_181 2、安装好JDK17&#xff0c;版本为&#xff1a;17.0.13 3、为了安装MySQL执行了 yum update -y&#xff08;这个时候不知道该命令的…