18 # promise 的 finally 方法实现原理

简介: 18 # promise 的 finally 方法实现原理

finally 表示不是最终的意思,而是无论如何都会执行的意思

Promise.resolve("kaimo666")
    .finally((data) => {
        console.log("resolve--finally-->", data);
    })
    .then((data) => {
        console.log("resolve--finally--then-->", data);
    });
Promise.reject("kaimo777")
    .finally((data) => {
        console.log("reject--finally-->", data);
    })
    .catch((err) => {
        console.log("reject--finally--err-->", err);
    });

如果返回一个 promise 会等待这个 promise 也执行完毕,如果是失败的 promise 会用它的失败原因传给下一个

下面实现一个 promise 的 finally 方法:

Promise.prototype.finally = function (callback) {
    // Promise.resolve(callback()) 包装一下 callback(),让其始终是一个 promise,有 then 方法
    return this.then(
        (value) => {
            // 成功就需要把成功的值传递下去
            return Promise.resolve(callback()).then(() => value);
        },
        (reason) => {
            // 失败就需要把失败的原因抛出去
            return Promise.resolve(callback()).then(() => {
                throw reason;
            });
        }
    );
};

测试:

Promise.resolve("kaimo888")
    .finally((data) => {
        console.log("finally-->", data);
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve("okk");
            }, 3000);
        });
    })
    .then((data) => {
        console.log("then-->", data);
    })
    .catch((err) => {
        console.log("err-->", err);
    });

目录
相关文章
|
11月前
|
前端开发 JavaScript API
📕重学JavaScript:Promise 的then()、catch() 和 finally()
大部分时候,你要用的 Promise 对象是 Web API 或第三方 API 返回的。我们要设置 Promise 对象,让它在变成 fulfilled 的时候执行我们想要的成功的代码,而在变成 rejected 的时候执行我们想要的失败的代码。
227 0
📕重学JavaScript:Promise 的then()、catch() 和 finally()
|
监控 前端开发
Promise的九大方法(resolve、reject、then、catch、finally、all、allSettled、race、any)你都用过那些?
Promise的九大方法(resolve、reject、then、catch、finally、all、allSettled、race、any)你都用过那些?
|
前端开发 开发者
图解 Promise 实现原理(二)—— Promise 链式调用
本系列文章由浅入深逐步实现 Promise,并结合流程图、实例以及动画进行演示,达到深刻理解 Promise 用法的目的。
937 0
|
Web App开发 JSON 前端开发
面试官很忙系列:Promise 的 done、finally 那些事
Promaise 大家再熟悉不过了,Promise 是异步编程的一种解决方案,比传统的解决方案,回调函数和事件更合理和更强大。Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
453 0
|
设计模式 缓存 前端开发
图解 Promise 实现原理(四)—— Promise 静态方法实现
本系列文章由浅入深逐步实现 Promise,并结合流程图、实例以及动画进行演示,达到深刻理解 Promise 用法的目的。
886 0
|
前端开发
图解 Promise 实现原理(三)—— Promise 原型方法实现
本系列文章由浅入深逐步实现 Promise,并结合流程图、实例以及动画进行演示,达到深刻理解 Promise 用法的目的。
1010 0
|
22天前
|
前端开发 JavaScript
如何处理 JavaScript 中的异步操作和 Promise?
如何处理 JavaScript 中的异步操作和 Promise?
16 1
|
22天前
|
前端开发 JavaScript
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
31 4
|
22天前
|
前端开发 JavaScript 开发者
JavaScript 中的异步编程:Promise 和 Async/Await
在现代的 JavaScript 开发中,异步编程是至关重要的。本文将介绍 JavaScript 中的异步编程概念,重点讨论 Promise 和 Async/Await 这两种常见的处理异步操作的方法。通过本文的阐述,读者将能够更好地理解和应用这些技术,提高自己在 JavaScript 开发中处理异步任务的能力。