js实现promise常用场景使用示例

news/2025/10/7 10:11:45/文章来源:https://www.cnblogs.com/spion/p/19128225

下面为你介绍 JavaScript 中 Promise 的几个些常用场景及实现示例,这些场景在实际开发中经常会遇到。

1. 异步请求处理

Promise 最常见的用途之一是处理异步请求,比如使用 fetch API 调用后端接口:

// 发起 GET 请求
fetch('https://api.example.com/data').then(response => {if (!response.ok) {throw new Error('网络请求失败');}return response.json(); // 解析 JSON 数据}).then(data => {console.log('获取到的数据:', data);// 处理数据}).catch(error => {console.error('请求出错:', error.message);}).finally(() => {console.log('请求完成(无论成功或失败)');});

2. 定时器操作

使用 Promise 封装定时器,可以更优雅地处理延迟操作:

// 封装延迟函数
function delay(ms) {return new Promise((resolve) => {setTimeout(resolve, ms);});
}// 使用
console.log('开始');
delay(2000).then(() => {console.log('2秒后执行');return delay(1000);}).then(() => {console.log('再1秒后执行');});

3. 并行执行多个异步操作

使用 Promise.all() 可以并行执行多个异步操作,等待所有操作完成后再处理结果:

// 模拟三个异步操作
const promise1 = fetch('https://api.example.com/data1').then(res => res.json());
const promise2 = fetch('https://api.example.com/data2').then(res => res.json());
const promise3 = new Promise(resolve => setTimeout(() => resolve(3), 1000));Promise.all([promise1, promise2, promise3]).then(results => {console.log('所有操作完成:', results);// results 是一个数组,包含三个操作的结果}).catch(error => {console.error('其中一个操作失败:', error);});

4. 只需要第一个完成的异步操作

使用 Promise.race() 可以等待第一个完成的异步操作:

// 模拟多个异步操作,其中一个会更快完成
const promiseA = new Promise(resolve => setTimeout(() => resolve('A完成'), 1000));
const promiseB = new Promise(resolve => setTimeout(() => resolve('B完成'), 500));
const promiseC = new Promise(resolve => setTimeout(() => resolve('C完成'), 1500));Promise.race([promiseA, promiseB, promiseC]).then(result => {console.log('第一个完成的操作:', result); // 会输出 "B完成"});

5. 异步操作队列

通过链式调用实现异步操作的顺序执行:

// 模拟异步任务
function asyncTask(taskName, delayMs) {return new Promise(resolve => {setTimeout(() => {console.log(`任务 ${taskName} 完成`);resolve(taskName);}, delayMs);});
}// 按顺序执行任务
asyncTask('任务1', 1000).then(() => asyncTask('任务2', 500)).then(() => asyncTask('任务3', 1500)).then(() => console.log('所有任务执行完毕'));

6. 与 async/await 结合使用

Promise 与 async/await 结合可以写出更像同步代码的异步逻辑:

// 结合 async/await 使用 Promise
async function fetchData() {try {const response = await fetch('https://api.example.com/data');if (!response.ok) {throw new Error('网络请求失败');}const data = await response.json();console.log('获取到的数据:', data);return data;} catch (error) {console.error('请求出错:', error.message);throw error; // 可以将错误继续抛出} finally {console.log('请求处理完成');}
}// 调用
fetchData();

这些示例覆盖了 Promise 在实际开发中的大部分常见用法。Promise 的主要优势在于能够更好地处理异步操作的流程,避免回调地狱,使代码结构更清晰、更易于维护。

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

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

相关文章

企业加强网站建设的必要性天津网站优化公司推荐哪家

说明:本系列是七月算法深度学习课程的学习笔记 文章目录1神经网络与卷积神经网络1.1 深度神经网络适合计算机视觉处理吗1.2CNN的结构1.2.1 数据输入层1.2.2 卷积层1.2.3 激励层1.2.3 池化层1.2.4 全连接层1.3CNN的训练算法1.4CNN的优缺点2正则化与Droupout3典型结构…

spatial for parallel compute 使用简介

spatial for parallel compute 使用简介spatial 能干嘛 spatial 可以很方便地设计并行计算电路,内置了 并行计算语法和流水线语法支持。 下载与编译 官方下载地址是 https://github.com/stanford-ppl/spatial 国内的备…

网站icp备案信息成都旅游的网站建设

一、简介 本文介绍基于 buildroot 文件系统的 QT 模块的使用方法: • 如何在 buildroot 工具里编译 QT 动态库; • 编译及运行 qt_demo 应用程序; • 适配过程遇到的问题。 二、QT动态库编译 在项目根路径执行 ./build.sh buildroot_menuc…

Mermaid 绘图--以企业权限视图为例 - 详解

Mermaid 绘图--以企业权限视图为例 - 详解2025-10-07 10:06 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bloc…

英语_阅读_Balancing Benefits and Risks_待读

Digital Life: Balancing Benefits and Risks Digital life has become a huge part of how we learn, play and connect, 数字生活已经成为我们学习、娱乐和社交的重要组成部分, From AI tutors that support school…

网站模版asp北京建网站公司

文章目录 零. RpcService服务概述1. AkkaRpcService的创建和初始化2.通过AkkaRpcService初始化RpcServer3. ResourceManager中RPC服务的启动4. 实现相互通讯能力 零. RpcService服务概述 RpcService负责创建和启动Flink集群环境中RpcEndpoint组件的RpcServer,且Rpc…

手机网站判断跳转淄博周村学校网站建设报价

前言 本文由于介绍Android多线程编程的学习。 线程基本用法 定义线程有两种方式,分别是继承Thread类、实现Runnable接口: 继承Thread类:只需新建一个类继承自Thread,然后重写父类的run()方法,在这个方法里面写耗时…

为什么有些网站看不到百度快照南宁网站制作哪家好

对于做互联网的朋友们来说,引流是一个必不可少的环节。 掌握一种优秀的引流方法至关重要,这也可以视为我们的生计之源。 今天,我将向大家介绍一款全自动的引流工具——抖音全自动引流脚本软件。 这款软件的效果非常显著,它可以替…

怎么做新网站才能被百度收录有哪些官网做得比较好

版本与信息查询 docker --version:查看安装的Docker版本。 docker info:获取Docker系统的详细配置信息。 镜像管理 docker images:列出本地所有镜像。 docker search IMAGE_NAME:搜索Docker Hub上的镜像。 docker pull IMAGE_NAME[:TAG]:从仓库下载指定镜像。 docker rmi …

企业网站维护的要求包括前端自我介绍面试技巧

Python的正则表达式使用 定义使用场景查替换分割 常用的正则表达符号查原字符英文状态的句号点 .反斜杠 \英文的[]英文的()英文的?加号 星号 *英文状态的大括号 {} 案例 定义 正则表达式是指专门用于描述或刻画字符串内在规律的表达式。 使用场景 无法通过切片,…

大模型部署

部署云服务部署 优势:前期成本低,维护简单 劣势:数据不安全,长期使用成本高本地机器部署 优势:数据安全,长期成本低 劣势:初期成本高,维护困难他人部署 1.阿里云白炼 2.百度智能云 3.硅基流动 4.火山引擎OLLAM…

读技术之外:社会联结中的人工智能02劳工

读技术之外:社会联结中的人工智能02劳工1. 劳工 1.1. 入口通道处每隔一定距离都会出现很多考勤钟标志 1.2. 休息间里的考勤钟也起着重要作用—进出房间的所有扫描都会被追踪 1.3. 每个班次间只能休息15分钟,还有无薪…

详细介绍:如何有效删除 iPhone 上的所有内容?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

鼠标图标更改样式

https://zhutix.com/tag/cursors/page/2/?post_order=likeI hope all of us can learn to progress!

做网站的预算表广西桂林天气预报15天查询

一、SpringBoot和SpringCloud简介 1、SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动SpringMVC),简化XML配置&am…

徐州网站建设价格odoo做网站

目录 Vue.js Ajax(axios) GET 方法 请求方法的别名 并发 请求配置项 响应结

马洪旭 做的网站大学赞友商城电商平台排名第几

以前都是用Cg的,现在改用GLSL,又要重新学,不过两种语言很多都是相通的。下面的例子是实现绘制一个三角形的简单程序。采用了VBO(veretx buffer object)、VAO(vertex array object)等OpenGL的一些…

网站开发速成培训机构郑州网站设计制作价格

1、正向代理 1.我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站 2.于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。 3.客户端必须设置正向代理…

webpack和vite的区别 - 指南

webpack和vite的区别 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

m3u8在线播放测试的方法与常见问题解决方案(附网页演示

在如今的流媒体视频环境中,m3u8格式因其分片传输、秒开等特性越来越常见。无论是开发、运维还是视频内容生产者,很多时候都会遇到需要测试或在线播放m3u8链接的需求。那么,如何方便、高效地测试m3u8流的可用性,遇到…