如何理解ES6中的Promise

58 阅读2分钟

什么是Promise

是异步编程的一种解决方案,但是这里注意的是Promise不是异步操作,也就不是异步编程,它只是异步编程的一个解决方案,它相对于我们传统的解决方案,比如说回调函数,它会更加的强大,更加的好用,你想以往的话我们去处理多层的异步操作,也就是多个异步操作串联,看个列子

     setTimeout(()=>{
      console.log('1')
      setTimeout(() => {
        console.log('2')
        setTimeout(() => {
          console.log('3')
        }, 3000);
      }, 2000);
      },1000) 

在这里我们的话定时器里面的回调函数,回调函数里面是实现我们的异步操作,实现异步操作这里我就打印1,也就是在一秒钟打印1,打印完之后过了两秒钟打印这个2,过了三秒钟打印这个3,可以看到第二个的定时器是等第一个异步操作结束之后执行的,这种操作是我们平时开发是比较常见的,这种就是多个串联的异步操作形成的回调地域

function fun(ms,val,nextval){
  return new Promise((resolve,reject)=>{
  //第一个异步操作
    setTimeout(() => {
      resolve('2')
      console.log('1')
    }, ms);
  })
}
fun(100).then((val)=>{
  return new Promise((resolve,reject)=>{
  //第二个异步操作
    setTimeout(() => {
      console.log(val)
      resolve('3')
    }, 2000);
  }).then((val)=>{
    return new Promise((resolve,reject)=>{
    //第三个异步操作
      setTimeout(() => {
        console.log(val)
      }, 3000);
    })
  })
})

这种我们的编码难度降低,代码会更加的清晰,可读性也强。Promise有三种状态,pending(进行中),fulfilled(已成功),rejected(已失败),特点:状态不受外界影响,只有异步操作的结果,决定当前是哪一种状态,一旦状态改变就不会再变(pending--->fulfilled,pending--->rejected)

Promise的用法

Promise是一个构造函数,用来生成Promise实例

// Promise构造函数接受一个函数作为参数,这个函数有两个参数
const p =new Promise(function(resolve,reject){
  // resolve函数:将Promise对象的状态从未完成变成成功,在异步操作成功的时候调用
  resolve()//返回一步操作的结果,作为参数传递出去
 // reject函数:将Promise对象的状态从未完成变成失败,在异步操作失败的时候调用
 reject()//返回一步操作的结果,作为参数传递出去
})