Promise的使用

一、Promise是什么?

  1:Promise是一个构造函数,用来异步编程的一种解决方案;

    主要用于异步计算、解决回调地狱问题

    没有剥夺函数return的能力,因此无需层层回调

    可以在对象之间传递和操作promise,帮助我们处理队列

    可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果

   2:异步常见的场景:事件监听、回调等

二、Promise的状态

  Promise有三种状态:

    1:pending(待定)初始状态

    2:resolved(完成fulfilled)操作成功 

    3:rejected(失败)操作失败

  Promise对象状态的改变只有两种情况: 

    1:pending - resloved (初始状态到操作成功)

    2:pending - rejected (初始状态到操作失败)

    #promise的状态改变,就会触发then()里的响应函数处理后续步骤,

  Promise对象有以下两个特点:

    1:Promise对象不受外界影响:

      只有异步操作的结果才会决定Promise的状态,任何其他操作都不会改变这个结果。

    2:Promise的状态一经改变,状态将不会再改变,任何时候都能得到这个结果

      只要状态改变了,则状态就凝固了,不会在变了,会一直保持这个结果;就算状态已经改变了,你再对Promise添加回调函数,也会立即那到这个结果。

      这个与事件不同,事件一但错过了,你再去监听它,是得不到结果的

三、Promise的基本使用

  1:Promise构造函数接受一个函数作为参数,两个参数分别为resolve和reject方法   

let P = new Promise(function(resolve,reject){
   if(/*如果异步操作成功*/) {
       resolve('操作成功')
   } else {
       reject('操作失败')
   } 
})

//一、 promise对象 then方法中有两个参数,分别为函数,第一个参数是操作成功函数,第二个参数是操作失败函数
P.then(function(res) {
    // 返回操作成功的响应函数
},function(err){
   // 返回操作失败的响应函数
})
// 二、promise对象除了then方法,还有一个catch方法,来捕获操作错误
p.then(res => {}).catch(err => {})

  ###注意:当我们new了一个对象,并没有调用它,我们传进的函数已经执行了;所以,我们用Promise时一般会包裹在函数中,在需要的时候调用这个函数。

  2:Promise有一些缺点

    #无法取消promise,一旦新建他它就会立即执行,无法中途取消

    #如果不设置回调函数,promise内部抛出的错误,不会反应到外部

    #当处于pending阶段时,无法判断当前什么状态

四、Promise的常用api

  1:Promise.resolve()

  2:Promise.reject()

  3:Promise.prototype.then()

  4:Promise.prototype.catch()

  5:Promise.all([P1, P2, P3]) 

    all()可以将多个promise方法封装成一个新的promise对象

    全部完成后才会进入then()方法,返回的是一个数组;否则会进入catch()方法 ,返回的是最先reject的值

  6:Promise.race([P1, P2, P3]) 

    里面那个结果捕获的快,就返回那个结果,不管结果本身是成功状态还是失败状态;实际项目中使用较少

原文地址:https://www.cnblogs.com/xsk-walter/p/12765245.html