ES6 从入门到精通 # 19:Promise 对象的其它方法
2023-03-14 22:58:54 时间
说明
ES6 从入门到精通系列(全23讲)学习笔记。
resolve 跟 reject
能将现有的任何对象转换成 promise 对象
let p =new Promise(resolve => resolve("kaimo")); console.log(p); p.then(res => { console.log(res) })
all
提供了并行的执行异步操作的行为,用于等资源都加载完了才进行操作,比如一些游戏等资源加载完才进行页面初始化。
let promise1 = new Promise((resolve, reject) => {}); let promise2 = new Promise((resolve, reject) => {}); let promise3 = new Promise((resolve, reject) => {}); let p4 = Promise.all([promise1, promise2, promise3]); p4.then(() => { // 三个都成功才算成功 }).catch(err => { // 一个失败则失败 })
race
给某个异步请求设置超时时间,并且在超时之后执行相应的操作
例子:请求图片资源
<!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> </head> <body> <script> function requestImage(imgSrc) { return new Promise((resolve, reject) => { const img = new Image(); img.onload = function() { resolve(img); } img.src = imgSrc; }) } function timeout() { return new Promise((resolve, reject) => { setTimeout(() => { reject(new Error("图片请求超时")); }, 2000) }) } Promise.race([requestImage("https://kaimo313.github.io/blogs/img/avatar.jpg"), timeout()]).then(res => { console.log(res) document.body.appendChild(res); }).catch(err => { console.log(err) }) </script> </body> </html>
下面模拟超时,f12 找到 network 选择 slow 3g,禁用缓存
finally
finally() 方法返回一个 Promise。在 promise 结束时,无论结果是 fulfilled 或者是 rejected,都会执行指定的回调函数。这为在 Promise 是否成功完成后都需要执行的代码提供了一种方式。这避免了同样的语句需要在 then() 和 catch() 中各写一次的情况。
Promise.race([requestImage("https://kaimo313.github.io/blogs/img/avatar.jpg"), timeout()]).then(res => { console.log(res) document.body.appendChild(res); }).catch(err => { console.log(err) }).finally(() => { console.log("finally") })
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的