专业的编程技术博客社区

网站首页 > 博客文章 正文

ES6 Promise继承API方法(es6多继承)

baijin 2024-08-19 11:31:18 博客文章 9 ℃ 0 评论

Promise.prototype.then()

Promise实例具有then方法,即then方法是定义在原型对象Promise.prototype上的。它的作用是为Promise实例添加状态改变时的回调函数。

注意:then方法返回的是一个新的Promise实例,不是原来那个Promise实例。因此可用采用链式写法,即then方法后面再调用另一个then方法。

Promise.prototype.catch()

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


Promise.all()

Promise.all方法用于多个Promise实例包装成一个新的Promise实例。

如果作为参数的Promise实例自身定义了catch方法,那么它被rejected时并不会触发Promise.all()的catch方法。

Promise.race()

Promise.race方法同样是将多个Promise实例包装成一个新的Promise实例。

Promise.resolve()

需要将现有对象转为Promise对象时使用该方法。

Promise.resolve()的参数分为以下四种情况:

1.参数是一个Promise实例

如果参数是Promise实例,那么Promise.resolve将不做任何修改,原封不动的返回该实例。

2.参数是一个thenable对象

thenable对象指的是具有then方法的对象

Promise.resolve方法会将这个对象转为Promise对象,然后立刻执行thenable对象的then方法。


3.参数不是具有then方法的对象或根本不是对象

如果参数是一个原始值,或者是一个不具有then方法的对象,那么Promise.resolve方法返回一个新的Promise对象,状态为Resolved。


4.不带任何参数

Promise.resolve方法允许在调用时不带参数,而是直接返回一个resolved状态的Promise对象。

如果希望得到一个Promise对象,毕竟方便的方法就是直接调用Promise.resolve方法。

Promise.reject()

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

Promise.reject()方法的参数会原封不动地作为reject的理由变成后续方法的参数。这点和Promise.resolve方法不一致。


done()

无聊Promise对象的回调链以then方法还是catch方法结尾,只要最后一个方法抛出错误,都有可能无法捕捉到(因为Promise内部的错误不会冒泡到全局)。为此,我们可以提供一个done方法,它总是处于回调链的尾端,保证抛出任何可能出现的错误。


finally()

finally方法用于指定不管Promise对象最后状态如何都会执行的操作。它与done最大的区别在于,它接受一个普通的回调函数作为参数,该函数不管怎样都必须执行。

Promise.try()

实际开发中经常遇到:不知道或者不想区分函数f是同步函数还是异步操作,但是想用Promise来出来它。因为这样就可以不管f是否包含异步操作,都要then方法指定下一步流程,用catch方法处理f抛出的错误。

那么有没有一种方法,让同步函数同步执行,异步函数异步执行,并且让他们具有统一API呢?

有一种是aysnc函数,一种是new Promise(),而Promise.try方法可以替代上面的方法。

由于Promise.try为所有操作提供了统一的处理机制,所以如果想用then方法管理流程,最好都用Promise.try包装一下。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表