Promise | catch、finally 方法实现(代码版)

文 / 景朝霞
来源公号 / 朝霞的光影笔记
ID / zhaoxiajingjing

❥❥❥❥点个赞,让我知道你来过~❥❥❥❥


Promise 的方法

经过手写 Promise 的原理后,再来理解 Promise 的方法,会更加容易了。

好啦,我们直接上代码~

原理传送门: 手写 Promise 原理

catch 方法

  • 使用

catch 方法是 then 方法的语法糖,只接受 rejected 态的数据。

let p = new Promise((resolve, reject) => {
    reject('爱上你是我的错o(╥﹏╥)o');
});

p.then(data => {
    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 方法里面,不接受成功态或失败态的数据,走一个过场,直接值穿透到下一个里面去。

适合把一些,成功态或失败态都有的逻辑放在这里面。

let p = new Promise((resolve, reject) => {
    reject('爱上你是我的错o(╥﹏╥)o');
});

p.then(data => {
    console.log(data, 'data');
}).finally(data => {
    console.log(data, 'finally');
}).catch(err => {
    console.log(err, 'err');
});
  • 实现
  1. finally 方法里面,值只是在这里走个过场
  2. 如果 callback 里面是一个Promise,那么需要等着他的结果。
Promise.resolve = function (value){
    return new Promise((resolve, reject) => {
        resolve(value);
    });
};
Promise.prototype.finally = function (callback){
    return this.then(data => {
        return Promise.resolve(callback()).then(() => data);
    }, err => {
        return Promise.resolve(callback()).then(() => {throw err});
    });
};

交流

文章首发,公众号:朝霞的光影笔记

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: promise的then方法用于处理promise对象的成功状态,它接收一个回调函数作为参数,当promise对象成功时,then方法会调用该回调函数。 promisecatch方法用于处理promise对象的失败状态,它接收一个回调函数作为参数,当promise对象失败时,catch方法会调用该回调函数。 promisefinally方法用于在promise对象无论成功或失败都会执行的操作,它接收一个回调函数作为参数,当promise对象无论成功或失败时,finally方法都会调用该回调函数。 ### 回答2: promise对象是用于处理异步操作结果的,它有一个then方法和一个catch方法,还有一个可选的finally方法。 首先,then方法用于处理promise对象的成功状态。当promise对象成功解决时,then方法会被调用,我们可以在then方法中指定一个回调函数来处理成功的结果。这个回调函数接收promise对象成功时的解决值作为参数,并返回一个新的promise对象。通过链式调用多个then方法,我们可以实现多个异步操作的顺序执行。 其次,catch方法用于处理promise对象的失败状态。当promise对象被拒绝时,即出现错误或异常,catch方法会被调用。我们可以在catch方法中指定一个回调函数来处理失败的原因,并返回一个新的promise对象。与then方法类似,catch方法也可以通过链式调用多个catch方法,以处理不同的失败情况。 最后,finally方法可选的。它会在promise对象无论是成功还是失败后都被调用。无论是在then或catch方法中返回的promise对象是解决还是拒绝,finally方法都会在最后被调用。我们可以在finally方法中执行一些清理操作,比如关闭资源或释放内存。 总结来说,then方法用于处理promise对象的解决状态,catch方法用于处理promise对象的拒绝状态,finally方法可选的用于在最后执行一些清理操作。通过这三个方法的灵活组合使用,我们可以更好地管理和处理异步操作的结果。 ### 回答3: promise的then方法catch方法Promise对象上的方法,用于处理异步操作的结果或捕获异常。 then方法可以接受两个参数——onFulfilled(成功时的回调函数)和onRejected(失败时的回调函数)。当一个Promise对象的状态变为fulfilled(成功)时,then方法会执行onFulfilled回调函数;当一个Promise对象的状态变为rejected(失败)时,then方法会执行onRejected回调函数。其中,onFulfilled和onRejected都是可选参数,可以根据实际需求只传入其中一个。 catch方法用于捕获Promise对象内部抛出的异常。它是then方法的语法糖,相当于只传递onRejected回调函数的then方法。当一个Promise对象的状态变为rejected(失败)时,catch方法会执行传入的回调函数,用于处理异常情况。 finally方法Promise对象的另一个方法,它接受一个回调函数作为参数。不管Promise对象的状态是fulfilled(成功)还是rejected(失败),finally方法都会执行传入的回调函数。该回调函数无论如何都会被执行,用于处理一些需要在Promise结束时执行的逻辑,比如清理工作。 总结来说,then方法用于处理Promise对象的成功和失败状态,catch方法用于捕获异常,finally方法用于执行一些无论Promise对象状态如何都需要执行的操作。这三个方法的链式调用可以有效地处理异步操作的结果,并进行必要的处理和清理工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值