当前位置:   article > 正文

面试考察之Promise对象_js 面试 promise

js 面试 promise

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'));
  • 1

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]);
  • 1

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/876544
推荐阅读
相关标签
  

闽ICP备14008679号