首页 > 其他分享 >什么是promise?

什么是promise?

时间:2024-11-06 15:59:59浏览次数:2  
标签:resolve console 什么 Promise error catch promise const

在 JavaScript 中,Promise 是一个用于处理异步操作的对象,它代表了一个最终会完成(或失败)的异步操作及其结果Promise 提供了一种更清晰和灵活的方式来处理异步代码,相比传统的回调函数(即“回调地狱”),Promise 更容易管理和阅读。

基本概念

  1. 状态:

    • Pending(进行中):初始状态,既不是成功也不是失败。
    • Fulfilled(已成功):操作成功完成。
    • Rejected(已失败):操作失败。
  2. 方法:

    • then(onFulfilled, onRejected):用于注册成功和失败的回调函数。
    • catch(onRejected):用于捕获错误,等同于 then(null, onRejected)
    • finally(onFinally):无论成功还是失败都会执行的回调函数。

创建 Promise

你可以使用 new Promise 构造函数来创建一个新的 Promise 对象。构造函数接受一个执行器函数(executor function),该函数有两个参数:resolvereject

const myPromise = new Promise((resolve, reject) => {
    // 模拟异步操作
    setTimeout(() => {
        const success = true; // 假设操作成功
        if (success) {
            resolve("Operation successful");
        } else {
            reject("Operation failed");
        }
    }, 1000);
});

使用 Promise

then 方法

then 方法用于注册成功和失败的回调函数。它可以链式调用,返回一个新的 Promise

myPromise
    .then(result => {
        console.log(result); // 输出: Operation successful
    })
    .catch(error => {
        console.error(error); // 如果失败,输出: Operation failed
    });

catch 方法

catch 方法用于捕获 Promise 链中的任何错误。

myPromise
    .then(result => {
        console.log(result);
    })
    .catch(error => {
        console.error(error);
    });

finally 方法

finally 方法用于注册一个无论成功还是失败都会执行的回调函数。

myPromise
    .then(result => {
        console.log(result);
    })
    .catch(error => {
        console.error(error);
    })
    .finally(() => {
        console.log("Promise is settled");
    });

支持链式调用

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

const promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve("Step 1 complete");
    }, 1000);
});

const promise2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve("Step 2 complete");
    }, 1000);
});

promise1
    .then(result1 => {
        console.log(result1); // 输出: Step 1 complete
        return promise2;
    })
    .then(result2 => {
        console.log(result2); // 输出: Step 2 complete
    })
    .catch(error => {
        console.error(error);
    });

常见的静态方法

Promise 还提供了一些静态方法,用于处理常见的异步操作:

  • Promise.resolve(value):返回一个已经成功(fulfilled)的 Promise
  • Promise.reject(reason):返回一个已经失败(rejected)的 Promise
  • Promise.all(iterable):返回一个在所有输入的 Promise 都成功时成功的 Promise,如果任何一个 Promise 失败,则返回失败的 Promise
  • Promise.race(iterable):返回一个在第一个输入的 Promise 成功或失败时就结束的 Promise
const promise1 = Promise.resolve("Success 1");
const promise2 = Promise.resolve("Success 2");

Promise.all([promise1, promise2])
    .then(results => {
        console.log(results); // 输出: ["Success 1", "Success 2"]
    })
    .catch(error => {
        console.error(error);
    });

const promise3 = Promise.resolve("First to resolve");
const promise4 = new Promise((resolve, reject) => {
    setTimeout(() => resolve("Second to resolve"), 500);
});

Promise.race([promise3, promise4])
    .then(result => {
        console.log(result); // 输出: First to resolve
    })
    .catch(error => {
        console.error(error);
    });

总结

Promise 是 JavaScript 中处理异步操作的强大工具。它提供了清晰的 API 和灵活的方法,使得异步代码更容易编写、阅读和维护。希望这些示例和解释能帮助你更好地理解和使用 Promise。如果有更多问题,欢迎大家留言!

标签:resolve,console,什么,Promise,error,catch,promise,const
From: https://www.cnblogs.com/wyl-1113/p/18509923

相关文章

  • 【TS】九天学会TS语法——1.TypeScript 是什么
    今天学习的是TypeScript基础,目标是了解TypeScript的基本概念,安装TypeScript,编写第一个TypeScript程序。TypeScript简介安装TypeScriptTypeScript编译过程编写第一个TypeScript程序随着前端开发的不断发展,TypeScript已经成为现代前端开发中不可或缺的一部分。......
  • 远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家
    一,概述FP7209是台湾远翔一款非同步升压LED驱动IC,封装有2种,分别是SOP-8L(EP),TSSOP-14L(EP)。控制外部开关NMOS。输入低启动电压2.8V,可支持单节锂电池供电。工作电压5V,VFB反馈电压0.25V,反馈电压低,取样电阻功率损耗也降低,整体转换效率提升。软启动时间透过外部电容调整,LED开路保......
  • 什么是ReasonML,有什么特点
    ReasonML简介ReasonML是一种函数式编程语言,由Facebook开发,旨在提供一种更现代、更易读的方式来编写OCaml代码。ReasonML的设计目标是结合OCaml的强大功能和JavaScript的易用性,使其更适合Web开发和前端应用。ReasonML编译成OCaml,然后可以进一步编译成JavaScrip......
  • 微信小程序使用Promise异步请求
     在微信小程序中,如果你希望在一个HTTP请求完成后再继续执行下面的代码,可以将后续代码放入请求的回调函数中。如果不想使用嵌套的回调函数,可以考虑使用 Promise 来处理异步请求。这样可以更清晰地组织代码,还能避免“回调地狱”的问题。这是原方法并不会在执行完http请求后......
  • 在K8S中,不能进入指定容器内部 是什么原因导致?
    在Kubernetes(K8s)中,不能进入指定容器内部可能由多种原因导致。以下是一些常见的原因及其解决方法:1.Pod状态异常Pod未运行:使用kubectlgetpods命令检查Pod的状态,如果Pod处于Pending、Failed或其他非Running状态,则无法进入容器内部。解决方法:根据Pod的事件日......
  • 一文搞懂:AI网关这个新东西是什么意思?有没有开源免费的选择?
    AI网关是什么意思?有什么用?AI网关是企业应用与内外部大模型之间的桥梁,它位于企业应用与内外部大模型的调用交汇点。AI网关的主要功能是将应用请求通过集中管理模块转发给1内部自建模型、2外部大模型服务提供商,甚至3海外模型提供商。通过这种方式,AI网关在企业内管......
  • 为什么要对参考文献著录进行要求?
    对参考文献著录进行规范要求有几个重要的原因:确保学术严谨性和规范性:参考文献的规范格式可以确保文献来源清晰、信息准确、便于他人查阅。这体现了学术研究的严谨态度,并帮助防止错误或误解。便于读者查阅和核实:规范的文献格式让读者可以轻松找到引用的资料来源,便于追溯......
  • 分节符的作用是什么?
    分节符在Word文档中有非常重要的作用,它用于将文档划分为不同的“节”。每个节可以独立设置页面格式、页眉页脚等,从而实现灵活的排版效果。以下是分节符的主要作用:独立页面设置分节符允许在同一文档中为不同部分设置独立的页面格式。例如,不同节可以设置不同的页面方向(如部......
  • 找不到msvcp140.dll无法继续执行代码是什么意思,如何修复
    msvcp140.dll是MicrosoftVisualC++库中的关键组件,具体而言,它是随MicrosoftVisualC++Redistributable包提供的动态链接库(DLL)文件。这一文件对于Windows操作系统中的应用程序至关重要,因为它包含了运行由VisualStudio2015或更高版本编译的C++应用程序所需的运行......
  • 大火的AI绘画是什么?从历史到技术突破,万字长文读懂火爆的AI绘画
    目前AI绘画的技术仍在不断变化发展中,其迭代之快,完全可以用"日新月异"来形容.即使把今年年初的AI绘画和现在相比,效果也有天壤之别。我们所说的"AI绘画"概念,更多指的是基于深度学习模型来进行自动作图的计算机程序.把"语言描述"通过AI理解自动变为了图像。目前语......