Promise学习之初步认识Promise

2024-08-25 10:52
文章标签 学习 初步 认识 promise

本文主要是介绍Promise学习之初步认识Promise,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、认识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状态、存储数据

这篇关于Promise学习之初步认识Promise的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105362

相关文章

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java springBoot初步使用websocket的代码示例

《JavaspringBoot初步使用websocket的代码示例》:本文主要介绍JavaspringBoot初步使用websocket的相关资料,WebSocket是一种实现实时双向通信的协... 目录一、什么是websocket二、依赖坐标地址1.springBoot父级依赖2.springBoot依赖

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert