promise系列之finally方法

直接对于finally方法的特点进行解释:

promise的finally方法特点介绍,以及相关的测试代码

1.调用finally的promise实例,无论成功和失败都会进入finally中执行
  const p=Promise.resolve(1);
        const p1=Promise.reject(2);
        const re=p.finally();
        // const re1=p.finally();
        console.log(re);
        // console.log(re1);
2.finally的回调函数不接受任何参数
   const p2=Promise.resolve(3);
        const re2=p2.finally((v)=>{
            console.log(v);
        })
        console.log(re2);

结果里面的内容log是undefined

对于返回值方面

1.没有回调函数的时候,直接穿透(上面代码已验证)
2.回调函数没有返回值或者返回的不是失败promise实例的时候,也是直接穿透
3.回调函数如果返回失败的promise,则finally返回的promise和回调函数返回的promise保持一致
      const p3=Promise.resolve(4);
        const re3=p3.finally(()=>{
            return Promise.resolve("此刻我返回的是成功,返回的是p3内容,穿透");
        })
        const re33=p3.finally(()=>{
            return Promise.reject("此刻我返回的是失败,没有穿透");
        })
        console.log(re3,re33);
4.回到函数中如果抛出异常,则finally直接返回失败的promise实例,值为异常信息
  const p4=Promise.resolve(5)
        const re4=p4.finally(()=>{
            throw new Error("直接抛出错误");
        })
        console.log(re4);

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以帮你模拟实现一个 Promise.finally 方法。这个方法会在 Promise 完成或被拒绝后都会执行一段回调函数。 首先,我们需要创建一个 Promise 类,它包含一个状态和相关的方法: ```javascript class MyPromise { constructor(executor) { this.state = 'pending'; this.value = undefined; this.error = undefined; this.finallyCallback = undefined; const resolve = value => { if (this.state === 'pending') { this.state = 'fulfilled'; this.value = value; if (this.finallyCallback) { this.finallyCallback(); } } }; const reject = error => { if (this.state === 'pending') { this.state = 'rejected'; this.error = error; if (this.finallyCallback) { this.finallyCallback(); } } }; try { executor(resolve, reject); } catch (error) { reject(error); } } finally(callback) { if (this.state !== 'pending') { callback(); } else { this.finallyCallback = callback; } } } ``` 在这个实现中,我们使用了一个 `finallyCallback` 属性来保存传入的回调函数。当 Promise 的状态变为 `fulfilled` 或 `rejected` 时,如果有回调函数存在,就会执行它。 接下来,我们可以使用这个自定义的 Promise 类来测试实现的 `finally` 方法: ```javascript const promise = new MyPromise((resolve, reject) => { setTimeout(() => { resolve('Success'); }, 2000); }); promise .then(value => { console.log(value); }) .finally(() => { console.log('Finally callback executed'); }); ``` 这段代码创建了一个 Promise,经过2秒后状态变为 `fulfilled`,然后会执行 `then` 方法中的回调函数,并在最后执行 `finally` 方法中的回调函数。 希望这个简单的实现能帮到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值