promise构造函数

Promise是ES6引入的异步编程解决方案,避免了回调地狱。本文详细介绍了Promise的构造函数、状态转换、API用法,如then、catch、resolve、reject等,并探讨了Promise如何修改状态、处理异常、中断链式调用以及与async/await的关系。通过学习,你可以更好地掌握Promise的使用技巧。

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

promise是一门新的技术(ES6规范),是JS中进行异步编程的新解决方案(旧方案是使用回调函数)。

promise从语法上来说是一个构造函数,从功能上来说,promise对象用来封装一个异步操作并可以获取其成功/失败的结果值。

异步编程有哪些? filesystem操作,数据库操作,ajax请求,定时器。

promise的优点:

1.指定回调函数的方式更加灵活 。

回调函数必须在异步任务前指定,而promise的执行流程为:启动异步任务 =》返回promise对象 =》给promise对象绑定回调函数(甚至可以在异步任务结束后指定);

2.支持链式调用,可以解决回调地狱问题。

回调地狱:回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调执行的条件

回调地狱不便于阅读,不便于异常处理。

promise的状态:

promise实例对象拥有一个属性 PromiseState,有三个属性 pending 未决定的,resolved/fullfilled成功的,rejected失败。

promise实例对象的状态只可能拥有两种,1.pending变为resolved。2.pending变为rejected。一个promise对象只可能改变一次状态,成功的结果数据成为value,失败的结果数据称为reason。

promise实例对象状态结果保存在属性PromiseResult中。

promise执行流程:

promise函数的API

1.Promise构造函数:Promise(excutor){},excutor是执行器(resolve,reject)=>{},在promise内部立即同步调用,异步操作在执行器中执行。

2.Promise.prototype.then(onResolved,onRejected) =>{}

onResolved是成功状态的回调函数,(value) => {},

onRejected是失败状态的回调函数,(reason) =>{}

返回一个新的promise对象

3.Promise.prototype.catch方法:(onRejected)=>{}

指定失败的回调函数,(reason) => {}

4.Promise.resolve方法

返回一个Promise对象,状态取决于传入参数类型。传入的参数为非promise对象,则会返回一个成功状态的Promise对象,传入的参数为promise对象,参数对象的状态会决定返回的Promise对象的状态

5.Promise.reject方法

Promise.reject返回一个失败状态的Promise对象,无论参数是什么,都会是失败状态,即使参数传入成功状态的Promise对象,返回的Promise值是成功的Promise对象,但状态仍为失败。

6.Promise.all方法

Promise.all方法参数为Promise对象数组,若其中有一个对象是失败状态,则方法返回的Promise对象为失败状态。参数数组对象全为成功状态才会返回成功状态的对象。

7.Promise.race方法

Promise.race方法参数为Promise对象数组,返回的Promise对象状态取决于第一个状态产生变化的参数对象。

相关问题:

1.Promise如何修改状态

1.修改成功状态
    resolve(value);
2.修改失败状态
    reject(reason);
3.抛出异常
    throw reason;

2.Promise能否进行多个回调

当promise对象改变状态时候都会调用

3.Promise指定回调和改变状态顺序问题

当执行器中执行的是同步任务时,改变状态先执行,回调函数后执行。1.在执行器中直接调用resolve()或reject() 2.延长更长时间才调用then();
当执行器中执行的是异步任务时,回调函数先执行,改变状态后执行。

4.Promise.then方法的返回结果由什么决定

1.抛出错误,会返回失败状态的promise对象

2.返回结果是非promise类型的对象,会返回成功状态promise对象,值就是返回值

3.返回结果是promise对象,返回的promise对象的值和状态由结果决定

5.Promise如何串联多个任务

1.Promise的then()返回一个新的Promise,可以写then()的链式调用。

2.通过then的链式调用,串联多个同步异步任务。

6.Promise异常穿透

1.当使用Promise的then链式调用时,可以在最后指定失败的回调。

2.前面任何操作出现了异常,最后都会传到最后的失败回调中去处理。

7.如何中断Promise链

在回调函数中返回一个pending状态的Promise对象。这样这个回调函数返回的Promise对象状态也为pending,那么后面指定的回调函数就不会被调用。

async函数

async函数返回一个 Promise 对象,返回结果是非promise类型的对象,会返回成功状态promise对象。返回结果是promise对象,返回的promise对象的值和状态由结果决定。抛出错误,会返回失败状态的promise对象。和then()方法返回值的规则是一样的。

await表达式

await表达式右边是失败状态的Promise对象,会抛出异常,需要用try...catch()捕获处理。

await表达式右边是成功状态的Promise对象,会返回此对象的PromiseResult。

await必须写在async函数中。async函数可以不写await。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值