【八股】介绍Promise(ES6引入)

Promise 是 JavaScript 中用于异步编程的一种非常重要的对象。它代表了一个异步操作的最终完成(或失败)及其结果值。以下是 Promise 的一些核心特性和应用:

出现--改进异步编程

  • 早期avaScript 的异步编程主要依赖于回调函数,容易导致"回调地狱"问题,代码难以阅读和维护。
  • Promise(ES6引入) 允许我们以近乎同步的方式编写异步代码,通过链式调用 .then().catch() 方法,显著提高了代码的可读性和可维护性。

状态和执行器函数

  • Promise 有三种状态:
    • Pending(进行中):异步操作未完成。
    • Fulfilled(已成功):异步操作成功完成,并且结果值就是成功的值。
    • Rejected(已失败):异步操作失败,并且原因已被抛出。
  • 这些状态反映了异步操作的当前状态,并且状态的改变是单向的:从 Pending 到 Resolved 或 Rejected,并且一旦状态改变,就不可再次更改。
  • 用new Promise构造函数,提供执行器函数:
    • resolve 在异步操作成功时调用,并且返回操作的结果。
    • **reject**在异步操作失败时调用,并且返回操作失败的原因。

应用场景

  • 在前端开发中,Promise 被广泛应用于各种场景,如 Axiosfetch API 等网络请求处理,以及文件上传、定时器等异步操作。

链式调用

  • 当存在多个依赖的异步操作时,Promise 允许我们以链式的方式进行异步操作,这样我们可以顺序执行多个异步操作,并且每个操作的结果可以作为下一个操作的输入

静态方法

  • Promise.all(iterable):等待多个 Promise 实例的完成。
  • Promise.race(iterable):只要有一个实例率先完成,就返回该实例的结果。
  • Promise.resolve(value):将一个成功的值包装成 Promise 对象。
  • Promise.reject(reason):将一个失败的原因包装成 Promise 对象。
  • 注意方法不能滥用,例如,使用 Promise.all 时,如果其中一个 Promise 失败,整个 Promise.all 调用都会失败。这可能导致一些数据加载失败,影响到整个流程的执行。

promise示例代码

javascript 复制代码
//创建Promise对象
const myPromise = new Promise((resolve, resolve) => {
    // 异步操作
    if (/* 操作成功 */) {
        resolve(value); // 正常完成
    } else {
        reject(error); // 失败
    }
});
  
//调用Promise实例的两个方法
  myPromise.then(value => {
    // 处理成功的值
}).catch(error => {
    // 处理错误
});

//链式调用--每个then可以返回一个新的Promise对象,被下一个then()接收
  myPromise
    .then(result => {
        // 第一个异步操作的结果
        return anotherAsyncOperation(result);
    })
    .then(newResult => {
        // 第二个异步操作的结果
        console.log(newResult);
    })
    .catch(error => {
        // 链式调用中任何地方出现的错误都会走到这里
        console.error(error);
    });

欢迎指正!

相关推荐
GIS阵地21 分钟前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
刘较瘦_41 分钟前
AI 开发中的 Git Submodule 父子仓库模式:前后端分仓管理与协作实践
前端·github
牧艺1 小时前
cos-design WeatherBackground:用 Canvas 做一个「会变天」的背景引擎
前端·canvas·视觉设计
OpenTiny社区1 小时前
深度解析 LSP 如何为 AI 装上“眼睛”
前端·ai编程
布列瑟农的星空1 小时前
流程类SVG画布的通用开发范式
前端
fsssb1 小时前
Chromium 源码学习笔记(七):那些跨进程的调用,底下都是同一个东西——Mojo
前端
MichaelJohn2 小时前
从零星白屏到“启发式缓存”,记录一次刚接手屎山的惊险排查
前端
程序员黑豆2 小时前
鸿蒙应用开发:6种图片加载方式详解
前端·华为·harmonyos
半个落月2 小时前
用 React 搭一个 WebGPU 模型加载页:从状态驱动到可复用进度条
前端·react.js
雪隐3 小时前
个人电脑玩AI-13让5060 Ti给你打工——我用 0.9B 小模型终结了"谁来记会议纪要"这个世纪难题
前端·人工智能·后端