ES6 Promise对象详解

Promise是ES6提供的异步编程解决方案,它是一种对象,拥有pending、fulfilled和rejected三种状态,不可逆。Promise对象解决了回调地狱问题,使得异步操作以同步流程表达。基本用法包括构造函数和then、catch、finally等方法,还有静态方法如Promise.resolve、Promise.reject、Promise.all和Promise.race等。
摘要由CSDN通过智能技术生成

Promise对象

概述

Promise是异步编程的一种解决方案。
从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。

Promise对象两个特点:

  • 对象的状态不受外界影响。有三种状态:
    pending:挂起(等待) 处于未决阶段 表示事情还在挂起种,最终结果没有出现
    resolved :已成功 , 处于已决阶段
    rejected:已失败 ,处于已决阶段
  • 一旦状态改变,就不会再变,任何时候都可以得到这个结果

注意:无论是状态还是阶段都是不可逆的
resolved 一个正常的已决阶段下的状态,后续处理为thenable
rejected 一个非正常的已决阶段下的状态,后续处理为catchable

状态的缺点:

  1. 无法取消 Promise ,一旦新建它就会立即执行,无法中途取消
  2. 如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。
  3. 当处于 pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

Promise解决异步的优点

回调地狱:某个异步操作需要等待之前的异步操作完成以后,无论是回调还是函数,都会陷入不断的嵌套 (简单来说就是无数的嵌套函数)
Promise的出现,可以将异步操作以同步的流程表达出来,很好的解决了回调地狱

基本用法

Promise对象是一个构造函数,该函数有两个参数:

  • resolve:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去
  • reject:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去
	const pro = new Promise((resolve,reject)=>{
            // 未决阶段
            // 通过调用resolve函数将promise推向已决阶段中的resolved状态
            // 
            // resolve和reject只能写一个,如果使用多个则只有第一个有效
            // 传递参数只能有一个,可以是任意数据类型的,表示推向状态的数据
            reject(123)
            // resolve({})
        })
        // console.log(pro)
        pro.then(data=>{
            // thenable  promise已经是已决阶段的resolved状态
            console.log(data)
        },err=>{
            // catchable  promise已经是已决阶段的rejected状态
            console.log(err)
        })
then 方法

then 方法接收两个函数作为参数,第一个参数是 Promise 执行成功时的回调,第二个参数是 Promise 执行失败时的回调,两个函数只会有一个被调用。

  • then()方法是Promise原型上定义的方法
    在这里插入图片描述
  • then()方法支持链式调用,上一个then()方法调用后返回的结果会传给下一个then方法中。
  • 第一个参数是resolved状态的回调函数
  • 第二个参数(可选)是rejected状态的回调函数
原型成员(实例方法)
  • Promise.prototype.then(resolved[,rejected]):为Promise实例添加状态改变时的回调函数
  • Promise.prototype.catch(rejection):用于指定发生错误时的回调函数(只要Promise方式错误就可以捕获)
  • Promise.prototype.finally():用于指定不管 Promise 对象最后状态如何,都会执行的操作(ES2018)
构造函数成员(静态成员)
  • Promise.resolve([*]):将现有对象转为 Promise 对象
  • Promise.reject(reason):返回一个新的 Promise 实例,该实例的状态为rejected

特殊情况:resolve和reject两个静态成员如果传递的是promise,则直接返回一个promise对象

  • Promise.all([new Promise,…]):这个方法会返回一个新的promise对象,如果里面所有的promise对象都成功了才会触发,一旦有一个失败则该promise失败
  • Promise.race([new Promise,…]):返回一个全新的promise对象,当数组中任意一个promise对象完成时,就马上回去使用完成好的promise对象的结果,不管这个 结果是成功还是失败

方法详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值