在JavaScript 中,如果你在Promise链中使用了catch,并且catch捕获到一个异常后,后面的then仍然会被执行,但有一些具体的行为取决于catch中的操作。 1、当promise.catch捕获到异常并返回一个值,那么后续的then会继续执行,并且接收catch中返回的值作为输入。如: newPromise((resolve, reject) => {reject('Error'); }...
}).catch(() =>{console.log('2-2') }) 调用catch方法在没有设置返回值的情况下默认也会返回一个状态为fulfilled的promise,正常情况下会走后面设置的then回调,但由于这里我们在catch中抛出了新的错误,所以又回到了前面出现的问题——后面的then中的arg2为throw error,因此状态再次发生顺延。 输出顺序为:2-1...
此刻p3变成fulfilled,p3.catch不会捕捉到任何错误,fn4不会运行。 假设去掉line9 里的fn3呢? // code 4letp1=newPromise((resolve,reject)=>{reject('error')})letp2=p1.then(()=>{//line 4console.log('ok 1')})//注意这里.then没第二个函数参数letp3=p2.then(()=>{//line 7console.log('o...
调用catch方法在没有设置返回值的情况下默认也会返回一个状态为fulfilled的promise,正常情况下会走后面设置的then回调,但由于这里我们在catch中抛出了新的错误,所以又回到了前面出现的问题——后面的then中的arg2为throw error,因此状态再次发生顺延。 输出顺序为:2-1、1-2、1-4 当然,如果要按开头翻车的答案顺序执...
在JavaScript的Promise中,catch和finally是两个用于处理异步操作结果的方法,但它们有不同的用途和行为。以下是它们的详细区别: catch 方法 目的: catch方法主要用于捕获Promise链中的错误(即拒绝状态)。 行为: 当Promise被拒绝时,catch会接收到这个拒绝的原因(通常是一个Error对象或任何值),并允许你处理这个错误。 如...
Promise.prototype.catch()方法是Promise.prototype.then(undefined, onRejected)方法的别名,用于指定发生错误时的回调函数。 catch方法接受一个参数,该参数是一个函数,拥有一个参数reason,参数的含义是Promise失败的原因。 p.catch(function(reason){}); 下面通过一个例子来说明catch的工作原理 ...
catch 就是 then 方法的语法糖,直接调用即可~ Promise.prototype.catch = function(callback){ return this.then(null, callback); }; finally 方法 使用 finally 方法,无论如何都会走到这里来的。 在finally 方法里面,不接受成功态或失败态的数据,走一个过场,直接值穿透到下一个里面去。
catch是then的便捷用法:catch方法实质上与调用Promise.prototype.then是一样的,用于捕获Promise链中的错误。then返回新的Promise对象:then方法是Promise的核心操作,它返回一个新的Promise对象,这允许进行链式调用。无论成功或失败,then都会执行:在Promise链中,每个then方法都会基于前一个Promise的结果执行...
PS~:Promise是一个构造函数,自己身上有all、reject、resolve等几个方法,原型上有then、catch等几个方法。 Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。 一、Promise有以下三种状态: pending: 初始状态,既不是成功,也不是失败状态 , ( 等待中 , 或者进行中 , 表示还没有得到结果 ...
如果是promise内部报错 reject 抛出错误后,then 的第二个参数就能捕获得到,如果then的第二个参数不存在,则catch方法会捕获到。 如果是then的第一个参数函数 resolve 中抛出了异常,即成功回调函数出现异常后,then的第二个参数reject 捕获捕获不到,catch方法可以捕获到。