ES6之promise

promise作用:通过链式调用解决回调地狱,可以获取异步操作的消息。
特点:
有三种状态:pending(进行中)、fulfilled(成功)和rejected(失败)。
只有异步操作的结果可以决定当前是哪一种状态,任何操作都无法改变这个状态。
缺点:
1.首先无法取消Promise,一旦新建他就会立即执行,无法中途取消。
2.如果不设置回调函数,Promise内部跑出的错误无法反应到外部。
3.当pending的时候,无法知道进展到了哪一步。
4.当函数调用多的时候,代码解构不清晰,代码可读性差

基本用法
ES6规定,Promise对象是一个构造函数,new实例

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。
resolve函数的作用:将Promise对象的状态从"未完成"变成"成功"。(即从pending变为resolved)。在异步操作成功的时候调用,并将异步操作结果作为参数传递出去;
reject函数的作用:将promise对象的状态从"未完成"变成"失败"(即从pending变为rejected)。在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

Promise.prototype.then()
then方法时定义在原型对象上的。
它的作用是为Promise实例添加状态改变时的回调函数。
then方法的第一个参数是resolved状态的回调函数,第二个参数是rejected状态的回调函数(可选)。
then方法返回的是一个新的Promise实例,因此可以采用链式写法,即then方法后面再调用另一个then方法。
链式调用:
new Promise(function(resolve,reject){}).
then(function(res){}).
then(function(res){})

采用链式的then可以指定一组按照次序调用的回调函数。这时,前一个回调函数可能返回一个还是Promise对象(即有异步操作),这时候一个回调函数就会等该Promise对象的状态发生变化,才会被调用。

  1. Promise.prototype.catch()
    Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误时的回调函数。

如果该对象状态变为resolved,则会调用then方法指定的回调函数;如果异步操作抛出错误,状态就会变为rejected,就会调用catch方法指定的回调函数。另外,then方法指定的回调函数,如果运行抛出错误,也会被catch方法捕获。

如果Promise状态以及变成resolved,再抛出错误是无效的。因为Promise的状态一旦改变,就永久保持该状态,不会再变了。
Promise对象的错误具有冒泡性质,会一直向后传递,直到被捕获为止,

  1. Promise.prototype.finally()
    finally方法用于指定不管Promise对象最后状态如何,都会执行的操作。

4.Pomise.all的使用
Promise.all([]) 方法返回一个 Promise 实例,此实例在参数内所有的 promise 都“完成(resolved)”时回调完成(resolve);如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),失败原因是第一个失败 promise 的结果。

Promse.all在处理多个异步处理时非常有用,比如说一个页面上需要等两个或多个ajax的数据回来以后才正常显示,在此之前只显示loading图标。
注意:Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的,即p1的结果在前,即便p1的结果获取的比p2要晚。优点:在请求数据的过程中,遇到发送多个请求并根据请求顺序获取和使用数据的场景,使用Promise.all毫无疑问可以解决这个问题。

5、Promise.race的使用
顾名思义,Promse.race就是赛跑的意思,意思就是说,Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值