Promise常见面试题

Promise是ES6引入的异步编程工具,用于管理处于pending、fulfilled或rejected状态的异步操作。它通过resolve和reject函数改变Promise状态,并通过then和catch处理回调。Promise.all等待所有子Promise成功才完成,而Promise.race只需一个子Promise完成或失败即返回结果。
摘要由CSDN通过智能技术生成

Promise是什么?

Promise是ES6加入标准的一种异步编程解决方案,通常用来表示一个异步操作的最终完成(或失败)。Promise标准的提出,解决了JavaScript地狱回调的问题。

语法

var p = new Promise( function(resolve, reject) {...} /* executor */  );
p.then(() => {})  // 成功resolve
.catch(()=> {});   // 失败reject

Promise构造函数

Promise构造函数executor函数,resolve和reject两个函数作为参数传递给executor(executor函数在Promise构造函数返回所建Promise实例对象前被调用)。resolve和reject函数被调用时,分别将Promise的状态改为fullfilled(完成)或rejected(失败)。executor内部通常来将promise状态改为fulfilled,要么调用reject函数将promise的状态改为rejected。如果在executor函数中抛出一个错误,那么该promise改为rejected。executor函数的返回值将被忽略。

描述

Promise对象在创建之后,并不一定会马上就有值,只是一个代理结果,它存在三种状态:

  • pending: 初始状态(等待状态),既不是成功,也不是失败状态;
  • fullfilled: 意味着操作成功完成;
  • rejected: 意味着操作失败完成。

方法

Promise.all(iterable)

这个方法返回一个新的Promise对象。一般该方法会接受一个iterable参数,里面是一个Promise列表,当所有的promise都触发成功时才会触发成功,一旦有一个失败了,则会马上停止其他Promise的执行。当iterable里面的结果都执行成功了,这个新的Promise对象会将所有的结果以数组的形式依次返回。当有一个失败时,这个新的Promise对象会将失败的信息返回。

Promise.race(iterable)

当iterable参数里的任意一个子promise被成功或失败后,父Promise马上也会用子Promise的成功返回值或失败详情作为参数调用父Promise绑定的相应句柄,并返回该Promise对象

Promise.reject(rease)

返回一个状态为失败的Promise对象,并将给定的失败信息传递给对应的处理方法

Promise.resolve(value)

返回一个状态由给定value决定的Promise对象。如果该值时thenable(即,带有then方法的对象),返回的Promise对象的最终状态由then方法执行决定;否则的话(该value为空,基本类型或者不带then方法的对象),返回的Promise对象状态为fullfilled,并且将该value传递给对应的then方法。通常而言,如果你不知道一个值是否是Promise对象,使用Promise.resolve(value)来返回一个Promise对象,这样就能该value,以Promise对象形式使用

Promise基本规则

  1. 首先Promise构造函数会立即执行,而Promise.then()内部的代码在当次事件循环的结尾立即执行(微任务)
  2. Promise的状态一旦由等待pending变为成功fulfilled或者失败rejected。那么当前Promise被标记为完成,后面则不会再次改变该状态。
  3. resolve函数和reject函数都将当前Promise状态改为完成,并将异步结果,或者错误结果当做参数返回。
  4. Promise.resolve(value)

返回一个状态由给定value决定的Promise对象。如果该值是thenable(即,带有then方法的对象),返回的Promise对象的最终状态由then方法执行决定;否则的话(该value为空,基本类型或者不带then方法的对象),返回的Promise对象状态为fulffiled,并且将该value传递给对应的then方法。通常而言,如果你不知道一个值是否是Promise对象,使用Promise.resolve(value)来返回一个Promise对象,这样就能将该value以Promise对象形式使用

  1. Promise.all(iterable)/Promise.race(iterable)

简单理解,这2个函数,是将接收到的Promise列表的结果返回,区别是,all是等待所有的Promise都触发成功了,才会返回,而race有一个成功了就会返回结果。其中任何一个promise执行失败了,都会直接返回失败的结果。

  1. Promise对象的构造函数只会调用一次,then方法和catch方法都能多次调用,但一旦有了确定的结果,再次调用就会直接返回结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值