zoukankan      html  css  js  c++  java
  • 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]) 

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

  • 相关阅读:
    【星云测试】Wings-面向企业级的单元测试用例自动编码引擎最新发布
    【星云测试】Wings企业级单元测试自动编码引擎白皮书
    Redis基础之命令篇
    Redis安装与启动
    My Self Introduction
    这就是小学生也会用的四则计算练习APP吗?- by软工结对编程项目作业
    Java余弦计算文本相似度项目—第一次个人编程作业(软件工程)
    Android 开发学习进程0.26 fragment的工厂实例化
    Android 开发学习进程0.25 自定义控件
    Android开发学习进程 0.24 存储机制
  • 原文地址:https://www.cnblogs.com/xsk-walter/p/12765245.html
Copyright © 2011-2022 走看看