当前位置: 首页 > news >正文

介绍一下Promise

Promise 是 JavaScript 中用于处理异步操作的对象。它表示一个异步操作的最终完成(或失败)及其结果值。Promise 提供了一种更优雅的方式来处理异步代码,避免了传统的回调地狱(Callback Hell)。

Promise 的三种状态

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

  2. Fulfilled(已成功):操作成功完成。

  3. Rejected(已失败):操作失败。

创建 Promise

const myPromise = new Promise((resolve, reject) => {
    // 异步操作
    setTimeout(() => {
        const success = true; // 模拟操作成功或失败
        if (success) {
            resolve('Operation succeeded!');
        } else {
            reject('Operation failed!');
        }
    }, 1000);
});

使用 Promise

then 方法

then 方法用于处理 Promise 的成功状态。

myPromise.then((result) => {
    console.log(result); // 输出: Operation succeeded!
});
catch 方法

catch 方法用于处理 Promise 的失败状态。

myPromise.catch((error) => {
    console.error(error); // 输出: Operation failed!
});
finally 方法

finally 方法无论 Promise 成功或失败都会执行。

myPromise.finally(() => {
    console.log('Operation completed!');
});

链式调用

Promise 支持链式调用,使得多个异步操作可以顺序执行。

myPromise
    .then((result) => {
        console.log(result); // 输出: Operation succeeded!
        return 'Next step';
    })
    .then((nextResult) => {
        console.log(nextResult); // 输出: Next step
    })
    .catch((error) => {
        console.error(error); // 输出: Operation failed!
    })
    .finally(() => {
        console.log('Operation completed!');
    });

Promise 的静态方法

Promise.resolve

创建一个立即成功的 Promise。

const resolvedPromise = Promise.resolve('Resolved immediately');
resolvedPromise.then((result) => {
    console.log(result); // 输出: Resolved immediately
});
Promise.reject

创建一个立即失败的 Promise。

const rejectedPromise = Promise.reject('Rejected immediately');
rejectedPromise.catch((error) => {
    console.error(error); // 输出: Rejected immediately
});
Promise.all

等待所有 Promise 完成,或任何一个 Promise 失败。

const promise1 = Promise.resolve('First');
const promise2 = Promise.resolve('Second');
const promise3 = Promise.resolve('Third');

Promise.all([promise1, promise2, promise3])
    .then((results) => {
        console.log(results); // 输出: ['First', 'Second', 'Third']
    })
    .catch((error) => {
        console.error(error);
    });
Promise.race

返回第一个完成(成功或失败)的 Promise 的结果。

const promise1 = new Promise((resolve) => setTimeout(resolve, 500, 'First'));
const promise2 = new Promise((resolve) => setTimeout(resolve, 100, 'Second'));

Promise.race([promise1, promise2])
    .then((result) => {
        console.log(result); // 输出: Second
    });

总结

  • Promise 是处理异步操作的对象,具有三种状态:Pending、Fulfilled 和 Rejected。

  • 使用 thencatch 和 finally 方法来处理 Promise 的结果。

  • 支持链式调用,使得多个异步操作可以顺序执行。

  • 提供静态方法如 Promise.resolvePromise.rejectPromise.all 和 Promise.race 来处理多个 Promise。

Promise 提供了一种更优雅和可读性更高的方式来处理异步操作,是现代 JavaScript 开发中的重要工具。


文章转载自:

http://ABpacUf3.pLgmn.cn
http://FZUWE9Im.pLgmn.cn
http://KRXnCb0c.pLgmn.cn
http://QTAflRHA.pLgmn.cn
http://sHfmQl5o.pLgmn.cn
http://CCUH37M3.pLgmn.cn
http://gLrzW2Po.pLgmn.cn
http://Yd2ulUav.pLgmn.cn
http://MKkTAyqK.pLgmn.cn
http://0ikbC4gL.pLgmn.cn
http://mSfxbMLj.pLgmn.cn
http://qTDSWSlS.pLgmn.cn
http://1S4t7Grn.pLgmn.cn
http://NdDFReFU.pLgmn.cn
http://7fES9Adk.pLgmn.cn
http://yq0a2pJW.pLgmn.cn
http://VyWbgR2M.pLgmn.cn
http://2GO8QP8R.pLgmn.cn
http://bp9z43gg.pLgmn.cn
http://1o10Z99G.pLgmn.cn
http://0eZ3u2d9.pLgmn.cn
http://4miS2wic.pLgmn.cn
http://XKhs24t9.pLgmn.cn
http://9B4k37XD.pLgmn.cn
http://XyPnCWK9.pLgmn.cn
http://lu0xwuca.pLgmn.cn
http://rXU9GoMn.pLgmn.cn
http://T1OHxXFn.pLgmn.cn
http://clSJfnO6.pLgmn.cn
http://6rl0o9tU.pLgmn.cn
http://www.dtcms.com/a/28877.html

相关文章:

  • 基于ffmpeg+openGL ES实现的视频编辑工具(一)
  • 鸿蒙与跨端迁移的重要性
  • Day15-后端Web实战-登录认证——会话技术JWT令牌过滤器拦截器
  • 扣子(coze)-又又又又又又进行了计费规则调整
  • C语言04
  • [NKU]C++基础课(五)补充:结构体
  • 邮件安全之发件人伪造
  • stm32单片机个人学习笔记15(I2C通信协议)
  • 如何在本地和服务器新建Redis用户和密码
  • 用《软件方法》引导AI全流程高效开发
  • SpringMVC的基本使用
  • Linux性能监控工具汇总
  • Java——this关键字
  • Python爬虫系列教程之第十二篇:爬虫异常处理与日志记录
  • 14、《SpringBoot+MyBatis集成(2)——进阶配置XML与注解的灵活运用》
  • 25年2月通信基础知识补充:多普勒频移与多普勒扩展、3GPP TDL信道模型
  • 使用JWT实现微服务鉴权
  • HbuilderX如何运行到手机模拟器,安卓模拟器
  • 玩机日记 12 群晖部署AList并配置SSL,安装opkg,使用rclone挂载到本地
  • 使用 OpenTelemetry 和 Langtrace 的 Elastic 分发跟踪基于 RAG 的聊天机器人
  • 【Next.js App Router 深度解剖手册】
  • C++项目:高并发内存池_上
  • Docker构建时,设定默认进入的工作目录的方法
  • 1、FreeRTOS基础知识
  • 用户体验测试
  • unity学习50:NavMeshAgent 区域Areas和cost
  • 鸿蒙NEXT开发-应用数据持久化之关系型数据库
  • cenos 安装 /usr/local/nginx/sbin/nginx这个路径的nginx
  • 微信小程序(uni)+蓝牙连接+Xprint打印机实现打印功能
  • Windows ARM工控主板支持EC200A系列4G模块