前端面试题之Promise

1. Promise有几种状态?

首先 Promise 有三种状态 pending(初始) fulfilled (实现)   rejected  (失败)

为什么呢?请看下面代码: 

pending状态

const promise1=new Promise((resolve,reject)=>{})
console.log(promise1)

当我们实例化一个对象之后,由下面图片可知,此promise1此时的状态为pending,因为我们还没有执行Promise中的resolve或reject

fulfilled状态

const promise2 = new Promise((resolve, reject) => {
  resolve(1);
});
console.log(promise2);

 当我们实例化一个对象并使用其回调函数的resolve参数之后,由下面图片可知,此promise2此时的状态为fulfilled.

 rejected状态

const promise3 = new Promise((resolve, reject) => {
  reject(2);
});
console.log(promise3);

  当我们实例化一个对象并使用其回调函数的reject参数之后,由下面图片可知,此promise3此时的状态为rejected.

2.Promise的状态是否可改变?

 是不可变的。当promise进入fulfilledrejected后状态不可改变

3.Promise如何解决地域回调?

回调地狱如下:   

当我们发起网络请求时,有可能需要一个请求的结果返回后再执行下一个请求,这样可能会形成回调地狱

$.get("/getUser",function(res){

  $.get("/getUserDetail",function(){

     $.get("/getCart",function(){

       $.get("/getBooks",function(){ //...

       })

     })

   })

})

而promise的then方法就很容易去解决回调地狱

function request1()
{
    return new Promise((resolve,reject)=>resolve(1));
}
function request2()
{
    return new Promise((resolve,reject)=>resolve(2));
}
function request3()
{
    return new Promise((resolve,reject)=>resolve(3));
}
request1().then(v=>{
    return request2()
}).then(v={
    return request3()
})

4.Promise有哪些方法? 

Promise.all()

此方法用于将多个Promise实例包装成一个新的promise实例。它会等待数组中的各个Promise都执行成功后按顺序返回结果,如有一个不成功则执行不成功的promise的失败的结构

Promise.race()

用法与.all()差不多,都是传入数组。但是.race()是先先返回结果就先执行谁

5. 如何让Promise顺序执行?

async await

通过async  await可使得Promise按顺序执行

你可能感兴趣的:(JavaScript,前端,javascript)