ES6必学必会新特性之Promise介绍及使用

本文详细介绍了ES6中的Promise对象,包括它的优点、基本使用、状态属性、结果属性以及工作流程。同时,文章还探讨了Promise的API,如.then(), .catch(), .finally()等,并解析了Promise的关键问题。此外,文章还讲解了async/await的用法,阐述了这两个关键字如何简化异步编程,以及它们在处理异常和中断promise链中的作用。" 84687243,185257,Lua实现API请求签名验证,"['lua', '接口签名', 'nginx开发']
摘要由CSDN通过智能技术生成

一、Promise介绍与基本使用

Promise 是ES6引入的异步编程的新解决方案。在语法上来说Promise是一个构造函数,在功能上来说Promise对象用来封装异步操作(如node.js下的fs模块操作、数据库操作MySql等、ajax网络请求和定时器等)并可以获取其成功或失败的结果。

1.1、使用Promise的优点

指定回调函数的方式更加灵活:旧的方式必须在启动异步任务前指定,而promise则是启动异步任务→返回promie对象→给promise对象绑定回调函数(甚至可以在异步任务结束后指定/多个)。
支持链式调用问题,可以解决回调地狱问题:回调地狱不仅不便于阅读,还不便于异常处理,而Promise则可以解决这个问题。

//经典回调地狱问题
asyncFunc1(opt, (...args1) => {
   
	asyncFunc2(opt, (...args2) => {
   
		asyncFunc3(opt, (...args3) => {
   
			//...
		});
	});
});

1.2、Promise的基本使用

Promise是构造函数,因此先要实例化。实例化时需要接收一个函数形式的参数,该函数有两个形参:resolvereject ,resolve和reject都是函数类型的数据,当异步任务成功时调用resolve,失败时调用reject。实例化并封装异步操作后,再调用 then 方法,该方法接收两个函数形式的参数,第一个函数是对象成功时的回调,第二个是失败时的回调。

const p = new Promise((resolve,reject) => {
   
	setTimeout(() => {
   
		let n = Math.random();
		if(n <= 0.3) {
   
			resolve(n);  //调用后将promise对象的状态设置为‘成功’,把成功的结果传给resolve函数
		}else {
   
			reject(n);  //调用后将promise对象的状态设置为‘失败’,把失败的结果传给reject函数
		}
	},1000)
});
p.then((value) => {
   
	alert('恭喜中奖!n的值是:' + value);
}, (reason) => {
   
	alert('再接再厉!n的值是:' + reason);
})

1.3、Promise的状态属性

Promise的状态属性是指实例对象中的一个属性 PromiseState它仅有三种值:pending(未确定)、resolved(或 fulfilled )(成功)、rejected(失败)。其中pending是初始化的默认值。Promise的状态改变的情况只有两种:①pending变成resolved;②pending变成rejected,即成功和失败的状态不能互相转变。无论pending是变为成功还是失败,都会有一个结果,成功的结果数据一般称为 value,失败的结果数据一般称为 reason

1.4、Promise的结果属性

Promise的结果属性是指实例对象中的另一个属性 PromiseResult ,它保存的是对象(异步任务)成功或失败的结果。只有resolvereject 函数可以修改这个属性的值,在后续的 then 方法中可以对该值进行操作。

1.5、Promise的工作流程

Promise的工作流程如下图:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值