面试考察之Promise对象

这篇博客主要探讨了Promise在面试中的常见问题,包括Promise构造函数的参数类型和执行时机,多次调用resolve或reject的影响,以及异常处理。还讨论了Promise的原理,jQuery的ajax返回的对象类型,以及如何确保一个函数在Promise的任何状态下都能被调用。Promise.all()的用法和处理异步任务的场景也被详细解释,同时提到了Promise的finally方法和done方法在处理错误时的角色。
摘要由CSDN通过智能技术生成

Promise方法你最常用什么写法?构造函数传入的参数是什么类型?(我回答的是匿名函数)那么,传入的该函数是会立刻执行的吗?若调用了两次resolve方法会怎么样?发生异常会怎么样?

Promise是一个构造函数,自己身上有all、race、reject、resolve这几个眼熟的方法,原型上有then、catch等同样很眼熟的方法。这么说用Promise new出来的对象肯定就有then、catch方法喽。
当通过Promise构造函数实例化一个对象时,会传递一个函数作为参数,而且这个函数在新建一个Promise后,会立即执行。所以传入的该函数是会立刻执行的。

会在本次new 操作立刻执行。。
第一次resove就确定了自己是成功还是失败。第二次没用了。添加reject也改变不了。
Promise 一旦决议了,之后的决议就没有用了,状态无法改变的。会忽略

补充resolve方法的两个用途:(1)改变状态;(2)传参
我们会在异步操作成功时调用resolve函数,其作用是将Promise对象的状态从Pending变为Resolved,并将异步操作的结果,作为参数传递给Fulfilled状态的回调函数。

发生异常分为以下几种情况:
参考:http://www.cnblogs.com/lvdabao/p/es6-promise-1.html

promise的原理?jquery的ajax返回的是promise对象吗?(百度面试)

jquery的ajax返回的是deferred对象,通过promise的resolve()方法将其转换为promise对象。

var jsPromise = Promise.resolve($.ajax('/whatever.json'));

promise 只有2个状态,成功和失败,怎么让一个函数无论成功和失败都能被调用? Promise.all() 是干什么用的,怎么用?

promise.all()的使用:
Promise.all方法用于将多个Promise实例,包装成一个新的Promise实例。

Promise.all方法接受一个数组作为参数,数组里的元素都是Promise对象的实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例,再进一步处理。(Promise.all方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例。)

var p =Promise.all([p1,p2,p3]);

p的状态由p1、p2、p3决定,分为两种情况。

  • 当该数组里的所有Promise实例都进入Fulfilled状态,Promise.all**返回的实例才会变成Fulfilled状态。并将Promise实例数组的所有返回值组成一个数组传递给Promise.all返回实例的回调函数**。
  • 当该数组里的某个Promise实例都进入Rejected状态,Promise.all返回的实例会立即变成Rejected状态。并将第一个rejected的实例返回值传递给Promise.all返回实例的回调函数。

怎么让一个函数无论promise对象成功和失败都能被调用?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值