Promise学习之初步认识Promise

news2024/11/24 8:40:13

目录

前言

一、认识Promise

(一) 含义

(二) 代码演示

二、Promise状态

三、总结


前言

在上一篇的学习中,我们已经认识到了同步与异步,异步代码在解决同步代码问题的同时,也会产生一些新的问题,比如常说的回调地狱,那为了解决异步带来的回调地狱问题,ES6为我们提供了一个新的对象Promise

一、认识Promise

(一) 含义

  1. Promise是异步编程的一种解决方案,比较传统的解决方案回调函数和事件更合理也更强大。
  2. Promise是一个用来存储数据的容器,里面保存着异步操作完成的结果

(二) 代码演示

创建Promise对象

const promise = new Promise((resolve, reject) => {
  // 具体代码
  // 根据代码执行的结果返回
  if (成功) {
    resolve(数据);
  } else {
    reject(失败响应);
  }
});

Promise是一个构造函数,需要通过new创建一个实例对象,并接收两个参数resolvereject,这两个参数也是函数,通过这两个函数改变Promise状态存储数据

通过then方法获取Promise响应

promise.then(res => {
  // promise执行成功的回调,res返回成功结果
}, err => {
  // promise执行失败的回调,err返回失败结果
});

案例代码

function sum(a, b) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(a + b);
    }, 2000);
  });
}
sum(10, 20).then((res) => {
  console.log(res);
});

二、Promise状态

Promise状态一共有三个,分别是

  • pending:初始状态
  • fulfilled:成功状态,表示异步执行成功
  • rejected:失败状态,表示异步执行失败

为什么需要Promise状态?

  • 确认异步操作的状态:pending表明正在进行中,如果是fulfilled或rejected就是执行结束了

Promise的状态只会从pending转到fulfilledrejected其中一个,这是必然的、不可改变的,结果只会是成功或者失败的,一旦fulfilled,那么rejected就不会出现,同理,一旦rejectedfulfilled也不会出现,最终的状态只会是这两个中的一个,也就是Promise(承偌)肯定会给你返回一个结果(成功或失败)

而改变Promise状态的也就是需要到resolvereject

  • resolve是执行成功的回调,会在then的触发第一个回调,并在这个回调做成功的对应操作(取数据、跳转页面等等)
  • reject是执行失败的回调,则会在then的第二个回调中触发,同样也可以在这回调中做操作(错误提示。。。)
const promise = new Promise((resolve, reject) => {
  if // 执行成功
    resolve();
  else // 执行失败
    reject();
});

根据不同状态的返回,可以通过then来获取,第一个回调获取的成功数据,第二个回调获取的是失败结果

function sum(a, b) {
  return new Promise((resolve, reject) => {
    // 成功
    resolve(a + b);
  });
}

sum(10, 20).then(
  (res) => {
    console.log("成功结果", res);
  },
  (err) => {
    console.log("失败结果", err);
  }
);

function sum(a, b) {
  return new Promise((resolve, reject) => {
    // 失败
    reject("异步执行出错了");
  });
}
sum(10, 20).then(
  (res) => {
    console.log("成功结果", res);
  },
  (err) => {
    console.log("失败结果", err);
  }
);

then的第二个回调不仅可以接收reject返回的数据,还可以接收执行异常错误

function sum(a, b) {
  return new Promise((resolve, reject) => {
    // 失败
    throw new Error("异常报错");
    reject("异步执行出错了");
  });
}
sum(10, 20).then(
  (res) => {
    console.log("成功结果", res);
  },
  (err) => {
    console.log("失败结果", err);
  }
);

三、总结

  1. 何为Promise?
  • 为了解决异步代码产生回调地狱问题的一种解决方案
  1. 基本语法
const promise = new Promise((resolve, reject) => {
  // 具体代码
  // 根据代码执行的结果返回
  if (成功) {
    resolve(数据);
  } else {
    reject(失败响应);
  }
});

promise.then(res => {
  // promise执行成功的回调,res返回成功结果
}, err => {
  // promise执行失败的回调,err返回失败结果
});
  1. Promise状态
  • 了解Promise执行阶段
  1. resolve和reject
  • 改变Promise状态、存储数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2072390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DBSCAN算法及Python实践

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的空间聚类应用)算法是一种基于密度的聚类算法,它在机器学习和数据挖掘领域有广泛的应用。以下是DBSCAN算法的主要原理和特点&#xff1a…

系统编程-管道

管道 目录 管道 1、管道的特点 2、无名管道的使用步骤 (1)在进程中使用 pipe 函数来获取管道的文件描述符 (2)使用 fork 函数来创建子进程 (3)通过获取到的文件描述符来进行数据的传输 &#xff08…

第八周:机器学习

目录 摘要 Abstract 一、注意力机制V.S.自注意力机制 1、引入 2、注意力机制 3、自注意力机制 二、自注意力机制 1、输入 2、输出 3、序列标注 4、Multi-head Self-attention 5、比较 总结 摘要 前两周学习了CNN的基本架构,针对全局信息的考虑问题&…

【Kotlin设计模式】Kotlin实现单例模式

前言 单例模式(Singleton Pattern),是确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。在 Android 中,有许多系统服务和 API 使用了单例模式,比如: Context: 通过getApplication…

SpringBoot2:创建项目及启动时相关报错整理

1、创建时报错 Initialization failed for https://start.aliyun.com/ Please check URL, network and proxy settings.Error message: Error parsing JSON response换官网地址初始化即可:https://start.spring.io/ 那么,大家肯定会疑问,官网…

【SpringBoot】10 日志持久化(log4j2)

介绍 日志概念 日志是系统生成的数据,用于记录网络、端点、物联网、应用程序、操作系统等,在运行时所发生事件的信息,便于开发人员或维护人员进行故障排查、性能优化、安全审计等工作。 日志作用 问题追踪及调试:当程序出现问…

C语言 | Leetcode C语言题解之第372题超级次方

题目&#xff1a; 题解&#xff1a; //计算a的b次方 int mypow(int a, int b){a a % 1337; // 防止a过大超出规模int ret 1;for(int i 0; i < b; i){ret * a;ret ret % 1337; //防止超出规模}return ret; } //整体计算 int superPow(int a, int* b, int bSize){if(a 1…

Android Jitpack制作远程仓库aar流程

开发高效提速系列目录 软件多语言文案脚本自动化方案Android Jitpack制作远程仓库aar流程 Android Jitpack制作远程仓库aar流程 背景aar制作与使用1. aar制作2. aar使用 异常解决总结 博客创建时间&#xff1a;2023.08.24 博客更新时间&#xff1a;2023.08.24 以Android stud…

leetcode刷题之二分算法

目录 简介 第一个错误的版本 算法思路 代码实现 两个数组的交集 算法思路 代码实现 两个数组的交集2 算法思路 代码实现 有效的完全平方数 算法思路 代码实现 猜数字大小 算法思路 代码实现 排列硬币 算法思路 代码实现 寻找比目标字母大的最小字母 代码实…

XTuner微调个人小助手认知实战

1 微调前置基础 本节主要重点是带领大家实现个人小助手微调&#xff0c;如果想了解微调相关的基本概念&#xff0c;可以访问XTuner微调前置基础。 2 准备工作 环境安装&#xff1a;我们想要用简单易上手的微调工具包 XTuner 来对模型进行微调的话&#xff0c;第一步是安装 XTun…

YOLO+Sort实现目标追踪

在前面的目标检测、实例分割的学习中&#xff0c;我们多是对单张图像进行处理&#xff0c;而事实上在我们的实际应用中多数需要对视频进行操作&#xff0c;当然这个操作也是讲视频转换为一帧帧的图像&#xff0c;但博主发现在ultralytics这个算法平台中&#xff0c;针对视频的处…

docker容器基本命令、docker进入容器的指令、容器的备份、镜像底层原理、使用commit命令制造镜像、将镜像推送到阿里云镜像仓库与私服仓库

除了exit 还有 ctrlpq exit退出停止 ctrlpq 退出不停止 将本地镜像推到阿里云 登入阿里云 容器镜像服务 实力列表 镜像仓库 创建镜像仓库 安装里面步骤来 这里192.168.10.145这部分用自己ifconfig地址

虚惊一场的一次事故,在事故中学习

上周日吃着晚饭时&#xff0c;“叮叮”两声&#xff0c;老板在QQ上单独M我。 “服务器好像崩了” “昨天和前天在线人数猛猛下滑 现在更是只有879人在线了” 看完消息&#xff0c;我震惊了&#xff0c;忙用筷子将碗中剩下的饭菜一股脑扒拉到嘴里&#xff0c;来到书桌前坐下&a…

华为OD机试-转盘寿司(C++ Java Python)

题目描述:寿司店周年庆&#xff0c;正在举办优惠活动回馈新老客户。寿司转盘上总共有n盘寿司&#xff0c;prices[i]是第i盘寿司的价格&#xff0c;如果客户选择了第i盘寿司&#xff0c;寿司店免费赠送客户距离第i盘寿司最近的下一盘寿司j&#xff0c;前提是prices[j]<prices…

RISC-V (七)外部设备中断

中断的分类 -本地中断 -software interrupt&#xff08;软终端&#xff09; -timer interrupt&#xff08;定时器中断&#xff09; -全局中断 -external interrupt&#xff08;外部中断 &#xff09; qemu主要是参考FU540-C000这款芯片做出来的&#xff0c;可以经常看一下这款…

学习yolo+Java+opencv简单案例(三)

主要内容&#xff1a;车牌检测识别&#xff08;什么颜色的车牌&#xff0c;车牌号&#xff09; 模型作用&#xff1a;车牌检测&#xff0c;车牌识别 文章的最后附上我的源码地址。 学习还可以参考我前两篇博客&#xff1a; 学习yoloJavaopencv简单案例&#xff08;一&#xff0…

ES5到ES6 js的语法更新

js是一门弱语言类型&#xff0c;为了实现更有逻辑的代码&#xff0c;需要不断更新语法规范&#xff0c;es就是用来规范js语法的标准。 09年发布了es5&#xff0c;到15年发布es6&#xff0c;到现在es6泛指es5.1以后的版本es2016&#xff0c;es2017。 var、let、const 关键字&…

Promise学习之基本方法

前言 上一篇章我们学习了Promise的概念、基本使用、状态等等&#xff0c;对于Promise也有了基础的了解&#xff0c;那本章就对与Promise的方法作基本学习&#xff0c;去了解了解Promise提供了什么方法。 一、then then处理Promise返回结果&#xff0c;接收两个回调函数 第一…

新建一个基于标准新建一个基于标准固件库的工程模板固件库的工程模板(实现LED单灯闪烁)

实验报告原件在资源可选择性下载 一、实验目的&#xff1a; 1.了解STM32固件库&#xff1b; 2.掌握STM32固件库关键子目录及固件库关键文件&#xff1b; 3.能够新建一个基于标准固件库的工程模板并完成编译 二、实验器材&#xff1a; 笔记本或电脑。 三、实验内容&#…

大投资模型 arxiv 量化论文

郭建与沉向阳 摘要 传统的量化投资研究面临着回报递减以及劳动力和时间成本上升的问题。 为了克服这些挑战&#xff0c;我们引入了大型投资模型&#xff08;LIM&#xff09;&#xff0c;这是一种新颖的研究范式&#xff0c;旨在大规模提高绩效和效率。 LIM 采用端到端学习和通…