当前位置:网站首页>ES6高级-Promise的用法
ES6高级-Promise的用法
2022-08-04 21:30:00 【吃鱼丸的申申】
概念:相当于一个容器,保存着未来才会结束的事件(异步操作)的一个结果。
特点:
1.对象的状态不受外界影响,处理异步操作三个状态:Pending(进行) Resolved(成功) Rejected(失败)。
2.一旦状态改变就不会再变。
(1)Promise对象有两个方法:
1.then()方法是执行异步任务返回成功的结果
then()的第一个参数是resolve回调函数,第二个参数是可选的,是reject状态回调的函数,then()方法返回的是一个新的Promise实例可以采用链式编程。
2.catch()方法是执行异步任务返回失败的结果
catch(err=>console.log(err))方法相当于then(null,err=>console.log(err)),所以用then写的可以改成下面这样(下面的写法也是最常用的写法):
来看几个Promise的案例代码
(一)
<body>
<script>
// resolved和rejected都是函数
let pro = new Promise(function(resolved, rejected) {
let res = {
code: 201,
data: {
name: 'sy'
},
error: '错误啦'
}
// 执行异步操作
setTimeout(() => {
if (res.code === 200) {
resolved(res.data);
} else {
rejected(res.error);
}
}, 1000)
})
pro.then(val => console.log(val), error => console.log(error))
</script>
</body>输出结果:
(二)下面这个代码很重要:通过Promise来设置定时器的秒数
<body>
<script>
// resolved和rejected都是函数
function timeout(ms) {
return new Promise((resolved, rejected) => {
setTimeout(() => {
resolved('hello');
}, ms)
})
}
timeout(2000).then(val => console.log(val))//hello
</script>
</body>then()返回的是一个新的Promise实例,看下面的代码:
<body>
<script>
// resolved和rejected都是函数
// 采用Promise来规定定时器的秒数
function timeout(ms) {
return new Promise((resolved, rejected) => {
setTimeout(() => {
resolved('hello');
}, ms)
})
}
let sy = timeout(2000).then(val => {
console.log(val);
return [1, 2, 3, 4];
}).then(val => console.log(val))
console.log(sy);
</script>
</body>输出结果:

(2)Promise对象的其他方法
关于Promise是同步还是异步可以看这个博客:promise是同步还是异步的?_Shi Jian Xin的博客-CSDN博客_promise是同步还是异步
1.resolve()方法
返回的是一个Promise实例,看下面的代码:
<body>
<script>
let p = Promise.resolve('foo');
// 上面这句话和下面这句话等价
// let p = new Promise(resolve => resolve('foo'));
console.log(p);
p.then(val => console.log(val));//foo
</script>
</body>输出结果:

2.reject()方法
返回的同样是一个Promise实例,看下面的代码:
<body>
<script>
let p = Promise.reject('foo');
// 上面这句话和下面这句话等价
// let p = new Promise(reject => reject('foo'));
console.log(p);
p.catch(val => console.log(val));
</script>
</body>3.all()方法
有时候会有多个Promise,比如在游戏控制的时候,Promise1是图片加载,Promise2是flash加载,Promise3是静态资源加载,要求当三个都加载完成之后再进行页面的初始化,这个时候就要用到all()方法,总结就是异步并行操作。

(4)race()方法
某个异步请求设置超时时间,并且在超时后执行相应的操作(重要)
<body>
<script>
function requestimg(imgsrc) {
return new Promise((resolve, reject) => {
const img = new Image();
img.src = imgsrc;
img.onload = function() {
// 请求成功返回一个Img对象
resolve(img);
}
})
}
function timeout() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject('图片请求超时');
}, 3000)
})
}
// 三秒之内如果请求到了图片就返回图片对象,如果没有返回图片就返回的’图片请求超时‘
Promise.race([requestimg('img/1.jpg'), timeout()]).then(data => {
console.log(data);
document.body.appendChild(data)
}).catch(err => console.log(err))
</script>
</body>输出结果:
(5)done()和finally()
不管是resolve还是reject,也就是不管成功还是失败,done()和finally()方法始终会执行。
边栏推荐
- 数电快速入门(三)(卡诺图化简法的介绍)
- LayaBox---知识点
- Pinduoduo open platform order information query interface [pdd.order.basic.list.get order basic information list query interface (according to transaction time)] code docking tutorial
- 基于 Milvus 和 ResNet50 的图像搜索(部署及应用)
- 【分布式】分布式ID生成策略
- [21天学习挑战赛——内核笔记](二)——设备树基础
- 88.(cesium之家)cesium聚合图
- 如何将二叉搜索树转化为一个有序的双向链表(原树上修改)
- PCBA方案设计——厨房语音秤芯片方案
- 【PCBA program design】Grip dynamometer program
猜你喜欢

Zynq Fpga图像处理之AXI接口应用——axi_lite接口使用
![OD-Model [6]: YOLOv2](/img/3d/c81846ad0f20e055adf0192fbb8e07.png)
OD-Model [6]: YOLOv2

动手学深度学习_NiN

数电快速入门(四)(组合逻辑电路的分析以及设计的介绍)

使用堡塔应用管理器配置laravel队列方法

mysql基础

JWT actively checks whether the Token has expired
![[2022 Hangzhou Electric Power Multi-School 5 1012 Questions Buy Figurines] Application of STL](/img/fe/1dd9418800366ee25067e154936e3b.png)
[2022 Hangzhou Electric Power Multi-School 5 1012 Questions Buy Figurines] Application of STL

JWT主动校验Token是否过期

数字重塑客观世界,全空间GIS发展正当其时
随机推荐
boostrap多选PID查找端口 window
立方度量(Cubic Metric)
for 循环中的 ++i 与 i++
链队
Dotnet using WMI software acquisition system installation
经验分享|盘点企业进行知识管理时的困惑类型
Android 面试——如何写一个又好又快的日志库?
开发deepstram的自定义插件,使用gst-dseaxmple插件进行扩充,实现deepstream图像输出前的预处理,实现图像自定义绘制图(精四)
win10 uwp 使用 WinDbg 调试
dotnet delete read-only files
如何根据“前序遍历,中序遍历”,“中序遍历,后序遍历”构建按二叉树
如何一键重装win7系统?重装win7系统详细教程
AI/ML无线通信
拼多多开放平台订单信息查询接口【pdd.order.basic.list.get订单基础信息列表查询接口(根据成交时间)】代码对接教程
后缀式的计算
DSPE-PEG-Aldehyde, DSPE-PEG-CHO, Phospholipid-Polyethylene Glycol-Aldehyde A hydrophobic 18-carbon phospholipid
JdbcTemplate概述和测试
1319_STM32F103串口BootLoader移植
PRIMAL: Pathfinding via Reinforcement and Imitation Multi-Agent Learning 代码解析
2、字符集-编码-解码