ES6-Promise对象与async函数

告别手动转换!用腾讯云轻量服务器+QMT插件,5分钟搞定聚宽策略实盘(附完整源码) 本文详细介绍如何利用腾讯云轻量服务器和QMT插件快速实现聚宽策略的自动化实盘部署。通过云端信号中转站解决协议转换、信号缓存等核心问题,5分钟完成服务器配置,并附完整源码实现零改造实盘方案,显著提升量化交易效率。 阅读详情

前言

今天给大家介绍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其他知识。谢谢大家的观看!

学Simulink--基于新能源与储能系统的场景实例:压缩空气储能(CAES)系统热力学建模 本文介绍了使用Simulink对压缩空气储能(CAES)系统进行热力学建模的详细流程。重点讲解了系统各模块的设计方法,包括压缩机、储气装置、膨胀机和热交换器等核心组件的参数设置与计算模型。文章还提供了控制策略设计和仿真运行的具体步骤,通过建立MATLAB函数计算关键参数变化,并分析了系统性能评估指标。该建模方法可用于验证CAES系统的设计有效性,并为优化储能效率提供技术参考。全文采用模块化设计思路,为新能源与储能系统的仿真研究提供了实用案例。 阅读详情

相关推荐

手把手教你用Microsoft AEC Challenge数据集训练自己的回声消除模型(附完整代码)

本文详细介绍了如何使用Microsoft AEC Challenge数据集训练专业的回声消除模型,包括环境准备、数据清洗、模型架构设计、训练流程和实际部署注意事项。通过完整的代码示例和实战指南,帮助开发者快速掌握AEC技术,提升语音通信系统的回声消除效果。

weixin_27697385的博客 456

详解Promise和Async用法

详解Promise和Async用法

weixin_52700022的博客 2611

如何手动打包Linux(麒麟系统)的Qt程序

Qt在windows上有自带的windeployqt来帮助打包程序,但是对于linux系统来说Qt并没有自带对应的打包程序。尽管存在开源的linuxdeployqt打包程序,但是在使用的过程中会出现很多问题,对于arm架构的系统来说需要编译并修改源码等等。确定你程序所需要的插件,然后将你使用的Qt版本对应的插件复制到plugins里边。你可以根据各个库后面的路径来找到对应的库,并将它们全部复制到之前创建的lib目录下。复制你的可执行程序到bin目录下(将 your_executable。

qq_45903233的博客 3606

ES6 async函数 promise对象

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

weixin_43679066的博客 1332

学习海康VisionMaster之圆查找

(1):ROI选中位置修正,并且修正信息需要选择刚刚创建的位置修正组件输出信息,这里的话后续的检测窗口一般都需要做这一步,因为大部分的应用场景都是需要用到实时跟踪的。圆查找模块是用于查找指定区域的圆,并且会输出该圆的相关参数信息,比如圆中心点,圆半径,圆是否存在等信息。7):剔除点数:和高级参数里面的剔除距离搭配使用的,就是过滤较远的边缘点,让拟合圆心出来的轮廓更加接近。中的圆查找,相当于就是拟合圆心,这个在视觉软件中的应用也是非常广泛的,通常用于定位,测量项目。

yuhouxiyang的专栏 2104

解决在封装自定义IP时加入ila,或者其他ip核时出错的情况

在查阅很多资料后,明白了这个应该是软件bug,但是最终还是解决了问题 我们只需要删除

weixin_42553916的博客 3604

promise对象

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

qq_43638735的博客 1513

python实现DoIP基本通信(收发报文)

python实现DoIP基本通信(收发报文)

天赐好车的博客 895

Promise 对象概述

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

chenrui310的博客 1501

【AI智能体】Dify 基于知识库搭建智能客服问答应用详解

Dify 基于知识库搭建智能客服问答应用详解

congge 6929

1. linux系统下在QT中配置OPenCV开发环境

在Linux系统下配置OpenCV的开发环境,需要在官网上下载源码,并使用CMake工具对源码进行编译,与在Windows系统中配置相比复杂许多,本文linux系统为linux minit,opencv是最新版本4.7.0,不过对于linux和opencv的版本要求行不高。此项更改为自己OPenCV想要安装的路径内,默认是安装在**/usr/local。在打开的文件中添加下图中的一行代码,路径是opencv默认的安装路径。按钮,弹出下图界面,默认选择即可,然后点击。

山间点烟雨 2906

javaScript中Promise简单介绍和理解

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

qq_42446479的博客 5874

时频分析之短时傅里叶变换(STFT)

本文利用MATLAB自带的spectrogram函数对信号做短时傅里叶变换。首先介绍了短时傅里叶变换(STFT)的背景及意义;其次,对spectrogram函数的用法以及变量的含义做了详细的解释;最后,利用MATLAB编写程序实现了信号的STFT。

总结论文中的算法并给出论文的复现代码 7万+

ES6 Promise对象,与 async 函数。

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

HHDTBJ的博客 407

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

qq_62555748的博客 1110

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

weixin_43758377的博客 241

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

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值