ES6中的promise对象

ES6中的promise对象

Promise 从本质上来讲就是一个构造函数

Promise对象是ES6中新增的一种解决异步操作的新的方案

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

使用回调函数解决异步操作会产生什么问题呢 --- 回调地狱

什么时候会出现回调地狱? ---- 当多个异步操作的结果相互依赖的时候就会出现回调地狱

为了解决回调地狱问题,在ES6中才引进了新的解决异步操作的方案 ---Promise对象

promise对象的基本使用:

1. 用法:Promise对象其实就是一个容器,存放异步操作
resolve,reject是两个函数类型的参数,作用就是处理异步操作的结果(resolve: 成功,reject: 失败)
        resolve:是处理成功的结果
        reject:是处理失败的结果
   const p = new Promise(function (resolve, reject) {
       setTimeout(function () {
           // resolve(666) //把成功的结果抛出去
            reject(888)//把失败的结果抛出去
        }, 2000)
    })
    console.log(p);
        
2. 从Promise对象中拿到异步操作的结果
    p.then(function (value) {
            console.log('异步操作成功了结果是:', value);
        }, function (reason) {
            console.log('异步操作失败了原因是:', reason);
        })

1. 在Promise对象中有两个属性:

state状态的特点
Promise 异步操作有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。除了异步操作的结果,任何其他操作都无法改变这个状态。
result结果:
抛出异常的结果

promise对象的链式调用

promise串联多个操作任务
	promise的then()返回一个新的promise,可以开成then()的链式调用
	通过then的链式调用串联多个同步/异步任务
then 方法

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

1. Promise.prototype.then()
	then 方法返回的是一个`新的` Promise 实例(注意,不是原来那个 Promise 实例)。因此可以采用`链式`写法,即 then 方法后面再调用另一个 then 方法
then方法的返回值:
then方法的返回值与回调函数的执行结果相关,并且无论何时then方法返回值永远是Promise对象

回调函数的执行结果和then方法返回的Promise对象的状态和结果是如何相关的?
回调函数执行结果为 非Promise对象是:
            1. 报错  Promise对象状态为失败的  结果:报错的内容
            2.没有报错  Promise对象状态为成功的  结果:回调函数的执行结果
        
        回调函数的执行结果为 Promise对象时:
            1. 回调函数return的那个Promise对象其实就是then方法的返回结果
2. Promise.prototype.catch()
`Promise.prototype.catch()`方法是 `.then(null, rejection)``.then(undefined, rejection)`的别名,用于指定发生错误时的回调函数
3. Promise.all()
`Promise.all()`方法用于将多个`Promise` 实例,包装成一个新的 Promise 实例。

	all方法:返回一个新的 promise, 只有所有的 promise 都成功才成功, 只要有一个失败了就直接失败
4. Promise.race()
`Promise.race()` 方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。

	race方法:返回一个新的 promise, 第一个完成的 promise 的结果状态就是最终的结果状态

async 和await

async:用来声明函数
     特点:函数的返回值始终为一个promise对象,Promise对象的状态和结果由函数的执行结果决定
     
await:等待,使用同步的方式获取Promise对象,Promise对象的状态和结果由函数的执行结果决定
	await 右侧的表达式一般为 promise 对象, 但也可以是其它的值;如果表达式是 promise 对象, await 返回的是 promise 成功的值;如果表达式是其它值, 直接将此值作为 await 的返回值
	
注:await必须写在async函数中,但是async函数中可以没有await,如果await的promise失败了,就会抛出异常,需要通过try...catch捕获异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值