Promise:异步编程的优雅解决方案

发布于:2025-09-02 ⋅ 阅读:(14) ⋅ 点赞:(0)

在现代 JavaScript 开发中,异步编程是一个不可或缺的部分。无论是处理网络请求、文件操作还是其他耗时的任务,异步编程都能帮助我们提高代码的效率和响应性。而 Promise,作为一种强大的异步编程工具,已经成为 JavaScript 中处理异步操作的标准方式。

什么是 Promise?

从语法上讲,Promise 是一个对象,从它可以获取异步操作的消息。从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。Promise 有三种状态:

  • Pending(等待态):初始状态,既不是成功,也不是失败。

  • Fulfilled(成功态):操作成功完成。

  • Rejected(失败态):操作失败。

状态一旦改变,就不会再变。创建 Promise 实例后,它会立即执行。

Promise 的基本用法

下面是一个简单的示例,展示如何使用 Promise 来处理异步操作。

<body>
    <div>test</div>
    <button onclick="test()">click me</button>
    <script>
        // 创建一个 Promise 对象
        let promise = new Promise((res, rej) => {
            // 定义一个条件变量 
            // 这里给定了一个固定的值, 条件以实际 情况为准
            let condition = true;
            if (condition) {
                // 如果条件成立,调用 resolve 函数,并传递一个字符串作为数据
                res("条件成立走这条路");
            } else {
                // 如果条件不成立,调用 reject 函数,并传递一个字符串作为错误信息
                // 可以 修改 condition 值 为 false
                rej("条件不成立走这条");
            }
        });

        // 定义一个函数,当按钮被点击时调用
        function test() {
            // 调用 Promise 的 then 方法来处理成功的情况
            promise.then((res) => {
                // 打印 Promise 成功时传递的数据
                console.log(res);
                // 返回一个新的字符串,这个字符串将被传递给下一个 then
                return "这个是第一个then 返回的数据";
            }).then((res) => {
                // 打印第一个 then 返回的数据,并在其后追加字符串 "11"
                console.log(res + "11");
            }).catch((err) => {
                // 如果 Promise 被 reject,或者在 then 的回调函数中抛出异常,catch 会捕获到错误
                console.log(err);
            });
        }
    </script>
</body>

代码解析

  1. 创建 Promise 对象

    let promise = new Promise((res, rej) => {
        let condition = true;
        if (condition) {
            res("条件成立走这条路");
        } else {
            rej("条件不成立走这条");
        }
    });
    • new Promise((res, rej) => { ... }):创建一个新的 Promise 对象。

    • let condition = true:定义一个条件变量,用于决定 Promise 的状态。

    • res("条件成立走这条路"):如果条件成立,调用 resolve 函数,并传递一个字符串作为数据。

    • rej("条件不成立走这条"):如果条件不成立,调用 reject 函数,并传递一个字符串作为错误信息。

  1. 处理 Promise

    function test() {
        promise.then((res) => {
            console.log(res);
            return "这个是第一个then 返回的数据";
        }).then((res) => {
            console.log(res + "11");
        }).catch((err) => {
            console.log(err);
        });
    }
    • promise.then((res) => { ... }):调用 Promisethen 方法来处理成功的情况。

    • console.log(res):打印 Promise 成功时传递的数据。

    • return "这个是第一个then 返回的数据":返回一个新的字符串,这个字符串将被传递给下一个 then

    • console.log(res + "11"):打印第一个 then 返回的数据,并在其后追加字符串 "11"。

    • catch((err) => { console.log(err) }):捕获任何在 Promise 链中发生的错误,并打印错误信息。

输出结果

假设 conditiontrue,点击按钮后,控制台的输出将是:

条件成立走这条路
这个是第一个then 返回的数据11

如果 conditionfalse,点击按钮后,控制台的输出将是:

条件不成立走这条

Promise 的优势

  1. 更好的错误处理

    • Promise 提供了统一的错误处理机制,通过 catch 方法可以捕获整个 Promise 链中的错误。

  2. 链式调用

    • Promise 支持链式调用,使得代码更加简洁和易读。

  3. 避免回调地狱

    • 传统的回调方式容易导致回调地狱(Callback Hell),而 Promise 可以有效避免这种情况,使代码更加清晰。


网站公告

今日签到

点亮在社区的每一天
去签到