Promise对象

原创 minsong 随笔 es6 188阅读 2018-03-14 17:47:31 举报

我们在写代码的时候肯定写过回调函数(如下所示),但是我们写的毁掉一般都是一二级,当我们遇到毁掉层级比较多的时候怎么解决?一直写回调代码会比较繁琐,维护也比较困难,这个时候我们会选择使用Promise对象来解决。

什么是Promise

Promise是异步编程的一种解决方案,它有三种状态,分别是pending-进行中、resolved-已完成、rejected-已失败
当Promise的状态从pending转变为resolved或rejected时,会执行相应的方法,并且状态一旦改变,就无法再次改变状态,这也是它名字promise-承诺的由来

Promise的基本用法

Promise对象是一个构造函数,用来生成Promise实例。实例化的Promise对象会立即执行。
声明一个promise对象

Promise.prototype.then()

.then()方法使Promise原型链上的方法,它包含两个参数方法,分别是已成功resolved的回调和已失败rejected(可选)的回调

Promise.prototype.catch()

.catch()的作用是捕获Promise的错误,与then()的rejected回调作用几乎一致。但是由于Promise的抛错具有冒泡性质,能够不断传递,这样就能够在下一个catch()中统一处理这些错误。同时catch()也能够捕获then()中抛出的错误,所以建议不要使用then()的rejected回调,而是统一使用catch()来处理错误.同样,catch()中也可以抛出错误,由于抛出的错误会在下一个catch中被捕获处理,因此可以再添加catch()。

Promise.prototype.finally()

finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。该方法是 ES2018 引入标准的。

Promise.all()

Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。参数为Promise对象数组。如果有不是Promise的对象,将会先通过下面的Promise.resolve()方法转换

p的状态由p1、p2、p3决定,分成两种情况。
(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

Promise.race()

参数与Promise.all()相同,不同的是,参数中的p1、p2、p3只要有一个改变状态,promise就会立刻变成相同的状态并执行对于的回调。

Promise.resolve()

有时需要将现有对象转为 Promise 对象,Promise.resolve方法就起到这个作用。

但Promise.resolve()会根据参数情况返回不同的Promise:
参数是Promise:原样返回
参数带有then方法:转换为Promise后立即执行then方法
参数不带then方法、不是对象或没有参数:返回resolved状态的Promise

Promise.reject()

Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为rejected。Promise.reject()会直接返回rejected状态的Promise

应用

图片加载

学习阮一峰大神的es6

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复