log('清理工作'); // 无论成功还是失败都会执行 }); 在这个示例中,如果Promise状态为fulfilled,则会依次执行第一个.then()的回调、第二个.then()的回调,最后执行.finally()的回调。如果Promise状态为rejected,则会跳过所有.then()的回调,直接执行.catch()的回调,然后执行.finally()的回调。
在第二个then或第二个catch中抛出一个异常,输出内容如下 在then中产生的错误不会在后面的catch中被捕获,而是继续执行后面的then和finally。 总结: 1. 正常返回值时(resolve),连续多个then和finally均会被执行; 2. reject抛出的错误只会被捕获一次,然后继续按顺序执行后面的then和finally,即使在then和finally中有错...
1//finally 无论fullfiled还是rejected状态都会执行2const promise =newPromise((resolve, reject) =>{3//resolve('heihei')4reject('error message')5})6promise.then(res =>{7console.log(res);8}).catch(err =>{9console.log(err);10}).finally(() =>{11console.log('finnally始终会执行');12})...
console.log(data, 'data'); }).catch(err => { console.log(err, 'err'); }); 实现 catch 就是 then 方法的语法糖,直接调用即可~ Promise.prototype.catch = function(callback){ return this.then(null, callback); }; finally 方法 使用 finally 方法,无论如何都会走到这里来的。 在finally 方法...
4、finally()方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。 promise .then(result => {···}) .catch(error => {···}) .finally(() => {···}); 另外,then()方法指定的回调函数,如果运行中抛出错误,也会被catch()方法捕获。
catch(err1=>{ console.log('catch err:',err1) }).finally(()=>{ console.log('finally') }) // 添加finally 方法 // 无论是fulfilled还是rejected 都需要执行finally里的函数 finally(onFinally){ // 直接调用 then 方法 this.then(()=>{ onFinally() },()=>{ onFinally() }) } // 在...
我们都知道,.then,.catch,.finally都可以链式调用,其本质上是因为返回了一个新的Promise实例,而这些Promise实例现在的状态是什么或者将来会变成什么状态,很多人心里可能都没个底。我自己也意识到了这一点,于是我通过一些代码试验,发现了一些共性。如果您对这块内容还没有把握,不妨看看。
Promise 对象有 3 个实例方法,它们分别是then()、catch()和finally()。 📌then() Promise 对象有一个叫做then()的方法,可以让您在 Promise 变成fulfilled或rejected的时候执行一些代码。它需要两个函数作为参数。第一个函数是用来处理fulfilled状态的,第二个函数是用来处理rejected状态的。
在上面的代码中,我觉得输出1 A 2是认为,当c中运行b()时调用了函数b,b中运行了a,并进入then逻辑输出1,then完毕后执行finally输出A,此时b()运行完毕,输出b的返回结果2,所以顺序是1 A 2。 这里思考的逻辑我参考的是Java中的try catch finally。但现在我发现这本质上有所区别,应该结合浏览器的微队列,以及Pro...