Promise.prototype.catch()方法是Promise.prototype.then(undefined, onRejected)方法的别名,用于处理Promise失败的情况。
当Promise处于Rejected状态时,catch方法会接收一个参数,该参数是一个函数,接收一个reason参数,表示失败的原因。
举例说明catch方法的工作原理。假设Promise状态为Rejected,那么在then方法中定义的第二个参数(即失败处理函数)不会被调用,失败信息则会被catch捕获并输出。
通常,不要在then方法中定义失败处理函数,而应始终使用catch方法。这样更接近同步的处理方式(try...catch)。
catch方法返回一个Promise。该Promise的行为与回调函数的返回值有关:
如果回调函数返回一个值或无返回值,返回的Promise变为Resolved状态,并返回该值。
若回调函数抛出错误,返回的Promise变为Rejected状态,并返回该错误。
若回调函数返回已Resolved的Promise,返回的Promise同样变为Resolved,并传递该Promise的返回值。
若返回已Rejected的Promise,返回的Promise变为Rejected,并传递该Promise的错误。
若返回进行中的Promise,返回的Promise变为相应终态,并传递相同的参数。
举例中,catch返回一个处于Pending状态的Promise。2秒后变为Resolved,随后的then方法被触发,输出Promise中的参数2。
一旦Promise状态改变(Resolved或Rejected),resolve或reject后的错误不会被处理,视为未抛出。
Promise对象的错误具有“冒泡”性质,会一直向后传递,直至被onReject函数处理或catch语句捕获。
与传统的try...catch不同,若未使用then方法的第二个参数或catch方法指定错误处理,Promise对象抛出的错误不会影响外层代码,不会阻止后续代码执行。
本文为Promise对象解析系列文章之三,旨在深入理解catch方法的使用与行为。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。