Promise 与 async await 的区分同步与异步任务

news/2024/11/17 0:08:21/

由于JavaScript负责解释执行的主线程是单线程的,所以如果遇到耗时比较大的任务则会导致后面的任务阻塞。所以将任务分为了异步任务和同步任务,异步任务又被分为宏任务和微任务。异步任务可以解决阻塞的问题但也会带来执行的不确定性。异步任务也叫异步编程最开始时使用的回调函数进行处理,但如果异步任务进行多层嵌套则会导致回掉地狱,不直观强耦合,回调的不确定性且不利于维护和复用,后续则出现了Promise解决回调地狱采用链式调用,并采用then方法保证了执行的顺序,且Promise也能保证每次返回的都是一个新的Promise;但这种方式还是不够简明—如果执行then方式链式调用太多则会造成代码的语义不够明确,所以出现了async & await的方式将异步任务写的像同步任务更加直观,async中可以有多个异步任务,async中一旦遇到异步任务则会抛出一个pending状态的Promise,并且暂时返回代码的执行权,使得函数外的代码得以继续执行,这是解决非阻塞的方式。等待异步任务执行resolve了或者reject了之后才会接着执行async函数内剩下的部分,保证了顺序的执行。
注意📢:我们所说的将异步任务写的像同步任务指的是async内部的函数像同步函数一样执行,而不是它会阻塞主线程一直等待异步任务完成。主要区分async函数内阻塞,而函数外不阻塞

👌🏻今天就学到这里了。


http://www.ppmy.cn/news/1412393.html

相关文章

vue中使用axios获取不到响应头Content-Disposition的解决办法

项目中,后端返回的文件流; 前端需要拿到响应头里的Content-Disposition字段的值,从中获取文件名 在控制台Headers中可以看到相关的字段和文件名,但是在axios里面却获取不到 如果想要让客户端访问到相关信息,服务器不仅要在head…

【c 语言】结构体的定义格式及变量初始化

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步&…

Python面向对象详解

文章目录 类和继承变量保护类装饰器 类和继承 Python虽然以函数式著称,但在Python中,万物皆对象,其对面向对象编程是有着非常不错的支持的。类是面向对象的核心数据类型,下面代码就创建了一个Person类。 class Person:count 0d…

Vite 中配置压缩代码体积

在 Vite 中配置压缩代码体积可以使用插件 vite-plugin-compress。以下是在 vite.config.js 中配置压缩代码体积的步骤: 安装 vite-plugin-compress 插件: npm install vite-plugin-compress --save-dev在 vite.config.js 中配置 vite-plugin-compress 插件: import { def…

uniapp 表单使用Uview校验 包括城市选择器

<view><!-- 注意&#xff0c;如果需要兼容微信小程序&#xff0c;最好通过setRules方法设置rules规则 --><u--form labelPosition"left" :model"model1" :rules"rules" ref"uForm" labelWidth"174"><u…

Golang 为什么需要用反射

本质上是可以动态获取程序运行时的变量&#xff08;类型&#xff09; 比如现在我想实现一个通用的db插入函数&#xff0c;支持我传入所有类型的struct&#xff0c;每一种类型的struct是一个单独的表&#xff0c;以struct的名称作为表名&#xff0c;然后插入到不同的表中。 pa…

ChatGPT与生成式AI:教育领域内新的浪潮与挑战

随着ChatGPT和其他生成式AI技术&#xff0c;如GPT-3.5、GPT-4的出现&#xff0c;我们正见证教育领域一场前所未有的变革浪潮。这些技术不仅推动了教育方式的进步&#xff0c;也为学习者带来了全新的机遇和挑战。 NO.1教育变革的新浪潮 生成式AI技术&#xff0c;特别是ChatGPT&…

面试题:volatile

一旦一个共享变量&#xff08;类的成员变量、类的静态成员变量&#xff09;被volatile修饰之后&#xff0c;那么就具备了两层语义&#xff1a; 1. 保证线程间的可见性 保证了不同线程对这个变量进行操作时的可见性&#xff0c;即一个线程修改了某个变量的值&#xff0c;这新值…