当前位置: 首页 > news >正文

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

下面为你介绍 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.hskmm.com/?act=detail&tid=25949

相关文章:

  • 英语_阅读_Balancing Benefits and Risks_待读
  • 大模型部署
  • 读技术之外:社会联结中的人工智能02劳工
  • linux
  • 鼠标图标更改样式
  • webpack和vite的区别 - 指南
  • m3u8在线播放测试的方法与常见问题解决方案(附网页演示
  • 校招题
  • Manim实现旋转扭曲特效
  • go语言学习 第5章:函数 - 详解
  • 混沌熵池:“创造之源”还是“皇帝的新衣”?
  • 间谍软件通过虚假自然灾害警报传播
  • KaTeX手册
  • Qt编写上下界面切换效果/前进到下一个界面/后退到上一个页面/零件工艺及管理设计系统
  • 【题解】P1131 [ZJOI2007] 时态同步
  • LGP9120 [NOIP 2022.5] 密码锁 学习笔记
  • 深入解析:OpenCV CUDA模块图像处理------创建CUDA加速的Canny边缘检测器对象createCannyEdgeDetector()
  • 机器人技术奖学金项目助力STEM教育发展
  • SAP ABAP 事务码 RZ12 里的 Max Number of WPs Used 参数的作用介绍
  • busybox 没有 clear 命令吗
  • 实用指南:Hive SQL 中 BY 系列关键字全解析:从排序、分发到分组的核心用法
  • 经过基于流视频预测的可泛化双手运行基础策略
  • 每个JavaScript开发者都应掌握的33个核心概念
  • 解决Docker存储空间不足问题 - 指南
  • 完整教程:数据结构:递归的种类(Types of Recursion)
  • Nova Premier模型安全评估结果解析
  • Paypal 设置不自动换汇
  • 诺贝尔生理与医学奖颁给这项革命技术,多家中国公司已布局!(附名单)
  • 钱璐璐,唯一通讯发Nature,作者仅2人!
  • 华为员工工资待遇表: