让Promise飞,让github star 飞

Promise 是 JavaScript 中用于处理异步操作的一种机制,它可以避免回调地狱,让异步代码更易于理解和维护。下面将从基本概念、创建和使用、链式调用、错误处理、并行处理等多个方面帮助你透彻掌握 Promise 的使用。

基本概念

别再让才华被埋没,别再让github 项目蒙尘!github star 请点击

GitHub 在线专业服务直通车GitHub赋能精灵 - 艾米莉,立即加入这场席卷全球开发者的星光革命!若你有快速提升github Star github 加星数的需求,访问taimili.com还可解锁更多专属服务。现在转发邀请好友组队,在艾米莉平台解锁神秘流量加成,让我们携手点亮开源世界的璀璨星空,实现GitHub star项目涨星的无限可能!

Promise 是一个对象,它代表了一个异步操作的最终完成或失败,并返回其结果。Promise 有三种状态:

  • pending(进行中):初始状态,既不是成功,也不是失败状态。
  • fulfilled(已成功):意味着操作成功完成。
  • rejected(已失败):意味着操作失败。

创建和使用 Promise

可以使用 Promise 构造函数来创建一个 Promise 对象,构造函数接收一个执行器函数,该函数有两个参数:resolvereject,分别用于将 Promise 的状态从 pending 变为 fulfilledrejected

javascript

javascript 复制代码
// 创建一个 Promise
const myPromise = new Promise((resolve, reject) => {
    // 模拟一个异步操作,例如网络请求或定时器
    setTimeout(() => {
        const randomNumber = Math.random();
        if (randomNumber < 0.5) {
            // 操作成功,将 Promise 状态变为 fulfilled
            resolve('操作成功');
        } else {
            // 操作失败,将 Promise 状态变为 rejected
            reject('操作失败');
        }
    }, 1000);
});

// 使用 Promise
myPromise
    .then((result) => {
        console.log(result);
    })
    .catch((error) => {
        console.error(error);
    });

链式调用

Promise 的强大之处在于它支持链式调用,通过 then 方法可以依次处理多个异步操作。

javascript

javascript 复制代码
function asyncOperation1() {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve('操作 1 完成');
        }, 1000);
    });
}

function asyncOperation2(result) {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(result + ', 操作 2 完成');
        }, 1000);
    });
}

function asyncOperation3(result) {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(result + ', 操作 3 完成');
        }, 1000);
    });
}

asyncOperation1()
    .then(asyncOperation2)
    .then(asyncOperation3)
    .then((finalResult) => {
        console.log(finalResult);
    })
    .catch((error) => {
        console.error(error);
    });

错误处理

Promise 链中,任何一个 Promiserejected,都会跳过后续的 then 方法,直接进入最近的 catch 方法进行错误处理。

javascript

javascript 复制代码
function asyncOperationWithError() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            reject('发生错误');
        }, 1000);
    });
}

asyncOperationWithError()
    .then((result) => {
        console.log(result);
    })
    .catch((error) => {
        console.error('捕获到错误:', error);
    });

并行处理

Promise.allPromise.race 是两个用于并行处理多个 Promise 的方法。

  • Promise.all :接收一个 Promise 数组,只有当所有 Promise 都成功时,才会返回一个新的 Promise,该 Promise 的结果是一个包含所有 Promise 结果的数组。如果其中任何一个 Promise 失败,则整个 Promise.all 会立即失败。
  • Promise.race :接收一个 Promise 数组,只要其中任何一个 Promise 完成(成功或失败),就会返回一个新的 Promise,该 Promise 的结果就是第一个完成的 Promise 的结果。

javascript

javascript 复制代码
const promise1 = new Promise((resolve) => {
    setTimeout(() => {
        resolve('结果 1');
    }, 1000);
});

const promise2 = new Promise((resolve) => {
    setTimeout(() => {
        resolve('结果 2');
    }, 2000);
});

const promise3 = new Promise((resolve) => {
    setTimeout(() => {
        resolve('结果 3');
    }, 1500);
});

// 使用 Promise.all
Promise.all([promise1, promise2, promise3])
    .then((results) => {
        console.log('Promise.all 结果:', results);
    })
    .catch((error) => {
        console.error('Promise.all 错误:', error);
    });

// 使用 Promise.race
Promise.race([promise1, promise2, promise3])
    .then((result) => {
        console.log('Promise.race 结果:', result);
    })
    .catch((error) => {
        console.error('Promise.race 错误:', error);
    });

结合 async/await 使用

async/await 是 ES2017 引入的语法糖,它基于 Promise 实现,让异步代码看起来更像同步代码,提高了代码的可读性。

javascript

javascript 复制代码
function asyncOperation() {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve('操作完成');
        }, 1000);
    });
}

async function main() {
    try {
        const result = await asyncOperation();
        console.log(result);
    } catch (error) {
        console.error(error);
    }
}

main();

通过以上内容的学习和实践,你应该能够透彻掌握 Promise 的使用,包括创建、链式调用、错误处理、并行处理以及与 async/await 的结合使用等方面。在实际开发中,合理运用 Promise 可以让你的异步代码更加简洁、高效和易于维护。

相关推荐
阿蒙Amon19 分钟前
【Python小工具】使用 OpenCV 获取视频时长的详细指南
python·opencv·音视频
Natsume171024 分钟前
嵌入式开发:GPIO、UART、SPI、I2C 驱动开发详解与实战案例
c语言·驱动开发·stm32·嵌入式硬件·mcu·架构·github
荔枝吻1 小时前
【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
人工智能·git·github
橘子编程1 小时前
Python-Word文档、PPT、PDF以及Pillow处理图像详解
开发语言·python
幻凡ss1 小时前
github pages使用免费CDN加速-netlify
github·github pages·github cdn·github pages加速·netlify加速github·hexo博客免费cdn加速·个人博客免费cdn加速
蓝婷儿1 小时前
Python 机器学习核心入门与实战进阶 Day 2 - KNN(K-近邻算法)分类实战与调参
python·机器学习·近邻算法
之歆2 小时前
Python-封装和解构-set及操作-字典及操作-解析式生成器-内建函数迭代器-学习笔记
笔记·python·学习
时序数据说3 小时前
时序数据库IoTDB用户自定义函数(UDF)使用指南
大数据·数据库·物联网·开源·时序数据库·iotdb
天天爱吃肉82183 小时前
ZigBee通信技术全解析:从协议栈到底层实现,全方位解读物联网核心无线技术
python·嵌入式硬件·物联网·servlet
Allen_LVyingbo3 小时前
Python常用医疗AI库以及案例解析(2025年版、上)
开发语言·人工智能·python·学习·健康医疗