ES6-Promise

本文详细介绍了ES6的Promise对象,包括其基本概念、使用方式、状态转换、属性及多种方法,如then、catch、finally、Promise.all和Promise.race等。Promise提供了处理异步操作的新方式,统一了接口,但存在不可取消和信息传递限制等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、介绍

Promise对象是一个代理对象,一个代表未知返回结果的对象值。这个值在Promise对象创建时可能是未知的,它允许你为异步操作的成功和失败分别绑定相应的处理方法, 这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是返回一个能代表未来出现的结果的promise对象

 

二、使用

new Promise(executor)

executor:一个带有两个参数(resolve和reject)的方法,resolve为fulfilled状态,即成功之后调用,reject为rejected状态,即失败之后调用。

即:new Promise(function(resolve, reject){})

1、executor在创建Promise对象时立即调用

2、若executor函数中抛出错误,promise状态为rejected,executor函数返回值被忽略

 

三、状态

pending:初始状态

fulfilled:成功状态

rejected:失败状态

1、fulfilled、rejected被统称为settled,fulfilled也可被称为resolved

2、只有两种状态变化过程:pending → fulfilled,pending → rejected,且状态只可变化一次,一旦发生变化便会一直保持这个结果。

 

四、属性

1、length:Promise构造器参数个数,始终为1(唯一参数executor)

2、prototype:构造器原型

 

五、方法

1、Promise.prototype.then(resolve[, reject])

resolve为成功回调函数,reject为失败回调函数(可选),参数为Promise实例返回值

2、Promise.prototype.catch(reject)

处理内容包括:① rejected状态对应返回结果,② catch方法前抛出的错误

3、Promise.prototype.finally()

Promise实例最终必须执行的操作

4、Promise.all([p1, p2, ... , p(n)])

p(n)(n = 1, 2, ... )均为Promise实例

① 只有参数中所有Promise实例的状态都为fulfilled,该方法返回的Promise实例状态为fulfiiled

② 参数中返回Promise实例的状态为rejected的数量大于等于1,该方法返回的Promise实例状态为rejected,返回数据为第一个状态变为rejected的参数方法返回结果

***注:返回Promise实例的状态为rejected,即Promise实例的状态为rejected,且没有catch方法做异常处理

5、Promise.race([p1, p2, ... , p(n)])

p(n)(n = 1, 2, ... )均为Promise实例

参数中任一Promise实例状态改变,该方法状态更新为相同状态,并且将该实例的返回结果作为参数传给该方法的回掉函数

6、Promise.resolve([p])

将p转换为一个Promise实例

p的值可以为:

① Promise实例p

该方法将不做任何处理,直接返回p本身

② 含有then方法的对象p

该方法将p转换为Promise实例,并且立即执行p中的then方法

③ 不含有then方法的对象,或者不是对象的p

该方法将p转换为Promise实例,状态为fulfilled

并将p传递给Promise实例回调函数resolve

④ 无参数

该方法将p转换为Promise实例

***注:该方法执行之后立即执行resolve,是在当前事件循环的结束时

eg:

// ①
setTimeout(function () {
  console.log(3);
}, 0);
// ②
Promise.resolve().then(function () {
  console.log(2);
});
// ③
console.log(1);
// 运行结果:
// 1
// 2
// 3

① 在下一轮事件循环开始执行,② 在当前时间循环结束时执行,③ 立即执行

7、Promise.reject(p)

将p转换为一个Promise实例,并立即执行reject,且回调函数的参数为p

8、Promise.try(p)

p为Promise实例

该方法相当于try{}catch(){},Promise.try(p)返回的Promise实例通过catch()既可以捕获同步错误,也可以捕获异步错误

 

**注:所有方法返回值均为新的Promise实例,因此都可链式调用

六、特点

1、优点:

① 通过同步的表达方式进行异步操作

② 统一的接口

2、缺点:

① 一旦创建、无法取消

② promise返回的信息只能通过回调函数传递到promise对象外部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值