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包装一下。
本文暂时没有评论,来添加一个吧(●'◡'●)