ES6-Promise对象与async函数

拆解歌尔2718硅麦:2.75mm超小封装背后的MEMS技术解析 本文深度解析歌尔2718硅麦的2.75mm超小封装技术,探讨MEMS麦克风在微型化过程中的声学性能与结构可靠性平衡。通过ASIC芯片堆叠、纳米级应力控制等创新技术,歌尔2718在TWS耳机和智能手机中实现卓越性能,同时克服微型化带来的声学挑战。 阅读详情

前言

今天给大家介绍ES6中的Promise对象与async函数。废话不多说,进入正题!

1.Promise对象

  • 什么是Promise?

      是一个用于异步编程的方案。
      从语法上看,Promise是一个对象,通过它可以获取异步操作的结果。
    
  • 为什么使用Promise对象?

      它的起因大家应该都知道,做前端开发最让人头疼的地方就是处理异步请求的情况。在请求成功的回调函数里继续调用函数。
      一但嵌套多了,就会形成回调地狱。代码的可读性差,后面也不利于维护。为了解决这些情况,所以就有了Promise对象。
    
  • 怎么用Promise对象?

1.1:Promise的三个状态
  • pending(进行中)
  • fulfilled(已成功)
  • rejected (已失败)

Promise对象的状态只有从pending到fulfilled,或者从pending到rejected。只要处于fulfilled和rejected,状态就不会在发生改变。即resolved(已定型)

基本语法:

//创建一个Promise对象
let promise = new Promise(function(resolve,reject){
	//这里编写异步请求的代码
	//假设异步请求成功
	resolve("success");

	//假设异步请求失败
	reject("error");
});

promise.then(function(value){
	console.log(value);//通知用户请求成功
},function(message){
	console.log(message);//通知用户请求失败
});
1.2:then方法
then方法有两个参数,第一个参数是Promise对象执行成功时的回调函数,第二个参数是Promise对象执行失败时的回调函数。两个函数只能有一个被调用。

注意点:

  • 在JavaScript事件队列当前运行完成之前,then方法的回调函数永远不会被调用。
let promise = new Promise(function(resolve,reject){
	resolve('success');
});

promise.then(function(value){//Promise对象执行成功的回调函数
	console.log(value);//该回调函数的value值就是创建Promise对象调用resolve()方法传的值。
},function(message){//Promise对象执行失败的回调函数
	console.log(message);
});

//另一种写法
promise.then(function(value){//Promise对象执行成功的回调函数
	console.log(value);//该回调函数的value值就是创建Promise对象调用resolve()方法传的值。
}).catch(function(message){//Promise对象执行失败的回调函数
	console.log(message);
});

console.log(666);
//666
//success

如下图:
在这里插入图片描述

1.3:then方法链式调用
  • then方法的返回值就是Promise对象,且Promise对象的值就是该返回值。状态值要么为resolved,要么为rejected。
  • 简便的Promise链式编程最后保持扁平化,不要嵌套Promise。
let promise = new Promise(function(resolve,reject){
	resolve(6);
});

promise.then(function(value){
	console.log(value);//6
	return value + 2;
}).then(function(value){
	console.log(value);//8
}).then(function(value){
	console.log(value);//undefined
	return Promise.reject("异常错误!");
}).then(function(value){
	console.log(value);
},function(message){
	console.log(message);//异常错误
}).then(function(value){
	console.log(value);//undefined
});

如下图:
在这里插入图片描述

下面用异步加载图片的案例进行演示

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<div style="width: 100%;" id="divImg"></div>
		<script>
			let div = document.getElementById("divImg");
			function loadImg(src){//src参数为图片地址
				return new Promise(function(resolve,reject){
					setTimeout(() => {
						let img = new Image();
						img.src = src;
						img.width = 400;
						img.height = 300;
						img.onload = function(){
							div.appendChild(img);
							resolve(img);
						}
						img.onerror = function(){
							reject("图片加载失败!");
						}
					},2000);//使用定时器模拟异步请求的延迟
				});
			}
			loadImg("http://img.ewebweb.com/uploads/20190403/21/1554298696-ctPdXnbaVY.jpg")
			.then(
				function(value){
					console.log("图片加载成功!src:"+value.src);
					return loadImg("https://weiliicimg6.pstatp.com/weili/l/540018899748520207.webp");
				},function(msg){
					console.log(msg);
					return Promise.reject(msg);
				}
			).then(
				function(value){
					console.log("图片加载成功!src:"+value.src);
					return loadImg("https://icweiliimg9.pstatp.com/weili/l/540018899748520227.webp");
				},function(msg){
					console.log(msg);
					return Promise.reject(msg);
				}
			).then(
				function(value){
					console.log("图片加载成功!src:"+value.src);
				},function(msg){
					console.log(msg);
				}
			);
		</script>
	</body>
</html>
上面这段代码一共会显示三张图片,前提是需要前面两张的图片地址没有错误。
如果第一张图片的地址错误,那么就算后面两张图片的地址都没有错误,也不会显示。

如下图:正常情况
在这里插入图片描述
第一张图片地址错误
在这里插入图片描述

2.async函数

async是ES7才有的与异步操作有关的关键字。并且与Promise对象和Generator函数有着密不可分的关系。

返回值:返回一个Promise对象,可以使用then方法添加回调函数。

基本语法:

async function hello(){
	return "hello";
}

console.log(hello());// Promise {<resolved>: "hello"}

hello().then( value => {
	console.log(value);//hello
});
2.1:await关键字
用于等待一个Promise对象,只能在async函数里使用,外面使用会报错。
async函数执行时,如果遇到await关键字就会先暂停执行,等待触发的异步操作完成后,恢复async函数执行的操作并返回解析后的值。

返回值:返回Promise对象的处理结果,如果不是Promise对象,则返回值本身。

基本用法:

async function add(num){
	return num + 2;//async函数会返回一个Promise对象。
}

function minus(num){
	return num - 2;
}

async function calc(){
	let result = await add(2);//将Promise对象里的PromiseValue值进行解析,然后返回。
	let result2 = await minus(2);//0
	console.log(result+","+result2);// 4
}
calc();

await针对所跟不同表达式的处理方式:

  • Promise对象:await会暂停执行,等待Promise对象执行完成,然后恢复async函数的执行操作并返回解析值。
  • 非Promise对象:直接返回对应值。

下面通过一个简单的案例来认识async函数和await关键字

async function doubleAfter2Seconds(num){
	return num * 2;//返回一个状态为resolve的Promise对象
}
			
async function calc(){
	let result = await doubleAfter2Seconds(2);//4
	result = await doubleAfter2Seconds(result);//8
	result = await doubleAfter2Seconds(result);//16
	console.log("计算后的结果为:"+result);//16
}
calc();

如果将第一、二个await关键字去掉会发生什么呢?result的值是什么?
在这里插入图片描述
在这里插入图片描述
答案是NaN,为什么呢?

因为一但去掉await关键字,那么就不会解析Promise对象中的值。会直接返回Promise对象本身。
而到了最后一个await关键字时,Promise对象去×2,返回的值肯定为NaN(非数值)

那我们去掉最后一个呢?result变量的值变成什么了?

对的,会返回Promise对象本身。变成了Promise对象。

在这里插入图片描述

结束语

好了,今天ES6的Promise对象与async函数就介绍到这里了,下面还会陆续更新ES6其他知识。谢谢大家的观看!

MIPI C-PHY介绍(Specification for C-PHY V1.2) 本文档描述了一个名为C-PHY的高速串行接口,它在带宽有限(bandwidth limited channels,看的有人说C的含义就是channel limit)的通道上提供高吞吐量性能,用于连接到外设,包括显示器和摄像头。首先0x4fff在0x4000~0x4fff区域,则f=(0,0,0,0,0,0,1),顺序是S6~S1;最后,端到端的传输过程是什么样呢,如下图所示,16bit先转换成7个符号(每个符号3位,共21位),然后并行数据转换成串行数据,输送到符号编码器和3个线的驱动器,接收端流程相反。 阅读详情

相关推荐

[pytorch] MedicalNet 3D Resnet预训练模型迁移学习实战:从分割到分类的代码改造

本文详细介绍了如何利用PyTorch对MedicalNet 3D ResNet预训练模型进行迁移学习,从分割任务改造为分类任务。通过解析模型结构、调整分类头、加载预训练权重及优化训练策略,帮助开发者在医疗影像领域快速实现高效模型部署。文章还涵盖了数据预处理、增强技巧及模型轻量化等实用内容。

kmeans3miner的博客 246

详解Promise和Async用法

详解Promise和Async用法

weixin_52700022的博客 2611

基于DFT的scanshift sdc模板(DFT)

摘要:本文详细介绍了DFT测试模式下的SDC约束方法。

murphyrong的博客 885

ES6 async函数 promise对象

1. promise对象的含义 Promise其实就是一个容器,里面保存着某个未来才会结束的事件(一般是异步)的结果。 Promise对象有两个特点: (1)对象的状态不受外界影响。promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。 (2)一旦状态改变就不会在变,任何时候都可以得到这个结果。promise对象的状态改变,只有两种可能情况:从pending变为fulfilled和从pending变为rejected。 注意: 只

weixin_43679066的博客 1332

Eplan P8自动线号生成全攻略:从电位定义点到连接编号的完整流程

本文详细解析了Eplan P8自动线号生成的全流程,从电位定义点的创建配置到连接编号的标准化管理,帮助电气设计人员提升图纸规范性和工作效率。重点介绍了自动编号方案的定义与调整技巧,以及企业级标准化实施建议,是掌握Eplan P8自动线号功能的实用指南。

weixin_29254029的博客 510

保姆级教程:用微信小程序+OneNet MQTT API,5分钟搞定温湿度数据实时展示

本文提供了一份详细的教程,教你如何利用微信小程序和OneNet MQTT API在5分钟内实现温湿度数据的实时展示。从OneNet平台配置到小程序数据绑定,手把手指导零基础开发者快速搭建监控系统,涵盖API调用、数据解析和界面设计等关键步骤。

weixin_30298497的博客 368

promise对象

promise是一个对象,从它可以获取异步操作的消息 promise状态 异步操作有三种状态:pending(进行中),fulfilled(已成功),rejected(已失败) 状态改变,只可以pending-->fulfilled, pending-->rejected变化;只有处于fulfilled,rejected,状态就不会变化了,即resolved(已定型) 状态的缺点 ...

qq_43638735的博客 1513

AWS-解析mysql binlog同步数据方案

虽然是公有云的鼻祖,AWS在某些产品的实现却太不给力;可能是习惯了阿里云喂到嘴边的感觉,AWS很多方案需要自己折腾,蛋疼!比如这里要讲的mysql数据同步方案。 阿里云产品DTS,点几下就OK了,AWS,只能通过插件安装、配置、调试、蹚坑……,具体就是用msk的debezium插件连接器。没见识过的一脸懵逼,下面说下配置步骤和一些注意的坑。

sdmei 1406

Promise 对象概述

Promise 对象是 JavaScript 的异步操作解决方案,为异步操作提供统一接口。它起到代理作用(proxy),充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口。Promise 可以让异步操作写起来,就像在写同步操作的流程,而不必一层层地嵌套回调函数。注意,本章只是 Promise 对象的简单介绍。首先,Promise 是一个对象,也是一个构造函数。// 异步代码...}上面代码中,Promise构造函数接受一个回调函数f1作为参数,f1里面是异步操作的代码。

chenrui310的博客 1501

78.在 Vue3 中使用 OpenLayers 实现地图地点搜索定位功能

本文详细介绍了如何在 Vue3 中集成 OpenLayers,实现地图地点搜索和定位功能。Vue3 项目环境的搭建与依赖安装。使用语法实现地图初始化和控件集成。通过 OpenLayers 的 Popup 和 Geocoder 插件,实现地址搜索和定位。希望这篇博文能帮助你快速掌握 Vue3 与 OpenLayers 的集成技术。如果在使用过程中遇到问题,欢迎在评论区留言讨论,或者参考 OpenLayers 官方文档获得更多帮助。注意。

小彭的博客 1848

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

javaScript中Promise简单介绍和理解

文章,大概描述Promise的一些概念,和相关的方法,(pending、fulfillen、rejected三种状态).then()、.catch()、.finally()、.all()、.race()方法介绍区别等,以及实例可供查看,以及后面有部分事件循环、宏任务、微任务的相关介绍和例子

qq_42446479的博客 5874

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ES6 Promise对象,与 async 函数。

ES6 Promise对象、 Promise概述 Promise是异步编程的一种解决方案。 从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。 封装了异步操作和成功,失败的回调。 承诺,保证。如果执行的状态发生了改变,成功就是成功,失败就是失败。 Promise的三种状态: pending 执行中 resolved 解决(成功) rejected 拒绝(...

HHDTBJ的博客 407

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【ES6新特性】ES6新特性中Promise对象的概念,Async函数的使用以及Module语法

ES6新特性中Promise对象的概念,Async函数的使用以及Module语法

qq_62555748的博客 1110

重学ES6之Promise 对象、Generator 函数、async 函数

重学ES6之Promise 对象、Generator 函数、async 函数 首先明确一个问题,为什么 Node.js 需要异步编程? JavaScript 是单线程的,在发出一个调用时,在没有得到结果之前,该调用就不返回,意思就是调用者主动等待调用结果,换句话说,就是必须等待上一个任务执行完才能执行下一个任务,这种执行模式叫:同步。 Node.js 的主要应用场景是处理高并发(单位时间内极大的访...

weixin_43758377的博客 241

重温JS——(ES6)异步编程(promise对象、async函数)

目录异步编程1、promise对象(1)概述(2)promise使用(3)链式操作用法(4)reject的用法(5)catch的用法2、async函数(1)async(2)await笔试题: es6 提供了一些构造函数:Map、Set、Promise 等等promise是异步编程的一种解决方案。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 异步操作有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。除了异步操作的结果,任

qq_52301431的博客 1022

ES6 Promise对象、async 函数

Promise对象 Promise的几个重要方法: Promise.all() const p = Promise.all([p1, p2, p3]); p1、p2、p3中哪个胜出,那么p的状态就会跟着它改变。 Promise.resolve() 现有对象转换成Promise对象,这样可以调用then方法等 const jsPromise = Promise.resolve($.ajax('/w...

LJD77231的博客 272

ES6 Promise对象 和 async函数

Promise 对象 Promise 对象是异步编程的一种解决方案。 从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。 该状态的特点: Promise 异步操作有三种状态:pending(进行中)、fulfilled /resolve(成功)和 rejected(失败)。除了异步操作的结果,任何其他操作都无法改变这个状态。 Promise 对象只有:从 pending 变...

qq_44903341的博客 244

ES6中变量的声明、对象及函数的拓展、rest、数组新特性、Promise、Generator函数及Async函数

weixin_45466923的博客 144

ES6中 Promise()对象,Promise.all()方法,Promise.race() 方法,async 函数

resolve()中的参数就是执行成功的结果,通过then() 进行接受, then() 参数是一个函数,函数的参数就是 resolve传递传递出来的数据。状态 改变: fun1(), fun2(), fun3() 三个实例对象 谁的状态先改变(不管成功还是失败),则p的状态都会随之跟随改变 如果fun1(), fun2(), fun3() 三个实例对象。接受的参数是一个数组, 数组中的每个值是promise 实例对象, all()的状态是由参数的状态的决定;如何判断10个请求都执行完成结束了呢?

你还有我 1273

ES6--异步编程(promise对象、async函数)

目录 异步编程 1、promise对象 (1)概述 (2)promise使用 (3)链式操作用法 (4)reject的用法 (5)catch的用法 2、promise对象 (1)async (2)await 异步编程 1、promise对象 (1)概述 promise是异步编程的一种解决方案。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。 Promise 异步操作有三种状态:pending(进行中)、fulfilled(已成功)和 re

qq_52301431的博客 865

ES6(五) Promise 对象、async 函数

Promise 是一个对象,从它可以获取异步操作的消息。 Promise 异步操作有三种状态: pending(进行中) fulfilled(已成功) rejected(已失败) Promise 的结果是单项的成功就是失败。 ...

leisz1634的博客 216

ES6 async函数

co模块约定,yield命令后面只能是Thunk函数或Promise对象,而async函数的await命令后面,可以是Promise对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即resolved的Promise对象)调用该函数,遇到await就去任务队列中执行异步操作,等到异步操作完成,在执行函数体后面的语句。async取代Generator函数的星号*,await取代Generator函数的yield。//Promise对象方法。//async函数写法。

2501_90329733的博客 575

ES6 async函数 基本用法详解

简介 async函数也就一种异步解决方案,是在ES2017引入的,为了使得异步更加方便,它可以说是Generator函数的语法糖。 下面有一个例子,分别用async和Generator写,大家可以看下区别, //generator const gen = function* () { const result = yield readFile("哈哈",...

麻瓜哇哇哇的博客 978

ES6 Promise 应用: 回调函数方法封装成 Promise + async/await 同步化

Promise 应用: 回调函数方法封装成 Promise,并透过 async/await 同步化 文章目录Promise 应用: 回调函数方法封装成 Promise,并透过 async/await 同步化简介参考完整示例代码正文什么是"接受回调函数的方法"?示例一:http 请求示例二:mysql 命令示例三:同步方法面临问题:回调地狱封装开始回调函数方法准备(接受回调函数的方法)使用 Promise 进行封装使用 async/await 关键字同步化结语 简介 前一篇ES6特性:Promise異步函數介

超悠閒的博客 2822

【ES6】变量与常量 && 模板字符串 && 对象 && 解构赋值 && 箭头函数 && 数组 && 扩展运算符 && Promise/Await/Async

本文介绍了JavaScript中的变量与常量、模板字符串、对象操作、解构赋值、箭头函数和数组常用方法。主要内容包括: 变量(let)与常量(const)的区别,const声明的数组和对象可以修改内容但不能重新赋值 模板字符串支持多行文本和嵌入表达式,简化字符串拼接 对象取值方式(点和中括号)、属性和方法的简写语法 数组和对象的解构赋值,可快速提取值并支持剩余参数 箭头函数的语法特点(参数括号、函数体大括号可省略)和常见应用场景 数组常用操作方法:增删(push/pop/shift/unshift)、任意位置

lirendada的博客 825

ES6深入—async 函数 与 Symbol 类型

对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 Symbol 值。ES5 时,声明对象属性通常使用的是字符串,ES6 中提供了 Symbol,使用 Symbol 可以作为对象的属性名。函数的 message 可以省略,表示对当前 Symbol 值的描述,用于区分 Symbol 变量。示例,新建一个名为 test1.js 的文件,在其中写入以下代码。statements: 函数体语句。

2401_89694040的博客 859
上一篇: ES6 class类与模块
下一篇: JVM 虚拟机详解内部原理(小白必看!)
柳时元
博客等级 码龄7年 13粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值