位置: IT常识 - 正文

promise和async用法及区别(详解)(promise async区别)

编辑:rootadmin
promise和async用法及区别(详解) 一、promisepromise的概念

推荐整理分享promise和async用法及区别(详解)(promise async区别),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:async和promise区别,promise和async的用法,promise与async的区别,async和promise执行顺序,promise 和async,promise 和async,promise和async的用法,promise、async有什么区别,内容如对您有帮助,希望把文章链接给更多的朋友!

Promise 是异步编程的一种解决方案,是一个构造函数,自身有all、reject、resolve方法,原型上有then、catch等方法。

特点:

对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)

一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。

一句话总结:就是用来解决地域回调问题(地域回调--回调函数里面嵌套回调函数)promise使用方法

用法一:Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由JavaScript引擎提供。

resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从Pending变为Resolved),在异步操作成功时调用,并将异步操作的结果作为参数传递出去。

reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作报出的错误作为参数传递出去。

用法二:Promise.resolve() 和 Promise.reject() 可以直接被调用。有时候,当判断出 promise 并不需要真正执行时,我们并不需要 使用 new 创建 Promise 对象,而是可以直接调用 Promise.resolve() 和 Promise.reject()。

地狱回调的例子

回调地狱是为了让我们代码执行顺序的一种操作(解决异步),但是它会使我们的可读性非常差。

//地狱回调setTimeout(function () { //第一层console.log('小锁'); //等3秒打印张三在执行下一个回调函数setTimeout(function () { //第二层console.log('李四'); //等2秒打印李四在执行下一个回调函数setTimeout(function () { //第三层console.log('王五'); //等一秒打印王五}, 1000)}, 2000)}, 3000)promise解决地域回调function resolveCallback(name, flag = true) {return new Promise((resolve, reject) => {// 处理异步任务setTimeout(() => {if (flag) {resolve(name)} else {reject('失败')}}, 1000)}, )}resolveCallback('张三').then(res => {console.log(res)return resolveCallback('李四')}).then(res => {console.log(res)return resolveCallback('王五')}).then(res => {console.log(res)}).catch(res => { //捕捉失败的回调结果console.log(res)})Promise.all()方法

Promise.all([ .. ]) 接受一个或多个值的数组(比如,立即值、promise、thenable)。它返回一个promise。

如果所有的值都完成,这个promise 的结果是完成;

promise和async用法及区别(详解)(promise async区别)

一旦它们中的某一个被拒绝,那么这个promise 就立即被拒绝。

let p1 = resolveCallback('张三')let p2 = resolveCallback('李四')let p3 = resolveCallback('王五')let p = Promise.all([p1,p2,p3]).then(res=>{console.log(res)}).catch(res=>{console.log('失败')})Promise.race 方法

Promise.race() 函数返回一个 Promise,它将与第一个传递的 promise 相同的完成方式被完成。它可以是完成( resolves),也可以是失败(rejects),这要取决于第一个完成的方式是两个中的哪个。

let p1 = resolveCallback('张三', 2)let p2 = resolveCallback('李四', 3)let p3 = resolveCallback('王五', 1)let p = Promise.race([p1, p2, p3]).then(res => {console.log(res)}).catch(res => {console.log('失败')})二、asyncasync的概念

Async/Await 代码看起来简洁一些,使得异步代码看起来像同步代码

async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise,那么它将会被隐式地包装在一个promise中。

sync await是基于Promise实现的,可以说是改良版的Promise,它不能用于普通的回调函数。

async 函数中 return 值如何接收?

方式一:通过 promise.then形参获取

方式二:接受函数返回值的方式是 await

await的作用

await关键字的作用 就是获取 Promise中返回的内容, 获取的是Promise函数中resolve或者reject的值(await 作用是获取promise.[[promiseValue]]的值)

关于await的注意点

(1)await 必须写在 async 中

(2)await 后是一个promise实例对象

三、为什么async/await更好?

使用async函数可以让代码简洁很多

不需要像Promise一样需要then

不需要写匿名函数处理Promise的resolve的值

也不需要定义多余的data变量,还避免了嵌套代码

本文链接地址:https://www.jiuchutong.com/zhishi/294563.html 转载请保留说明!

上一篇:创建vue2项目(vue创建项目后开始写的步骤)

下一篇:Vue中二级菜单的实现(vue二级菜单的隐藏与显示)

  • 超级IP是如何炼成的?(什么是超级ip)

    超级IP是如何炼成的?(什么是超级ip)

  • 华为nova9pro怎么多机位拍摄(华为nova9pro怎么关闭5G网络)

    华为nova9pro怎么多机位拍摄(华为nova9pro怎么关闭5G网络)

  • 苹果平板返回键怎么调出来(苹果平板返回键怎么设置小圆圈)

    苹果平板返回键怎么调出来(苹果平板返回键怎么设置小圆圈)

  • 华为定时调节护眼模式(华为定时调节护眼模式充电个性提示音任务栏怎么去掉)

    华为定时调节护眼模式(华为定时调节护眼模式充电个性提示音任务栏怎么去掉)

  • 微信挂圈封号吗(微信挂圈会不会泄露信息)

    微信挂圈封号吗(微信挂圈会不会泄露信息)

  • 手机文件在电脑看不见(手机文件在电脑上不显示)

    手机文件在电脑看不见(手机文件在电脑上不显示)

  • 手机怎么给视频命名(手机怎么给视频消音)

    手机怎么给视频命名(手机怎么给视频消音)

  • 多余输入端可以悬空使用的门是(多余输入端可以接地吗)

    多余输入端可以悬空使用的门是(多余输入端可以接地吗)

  • 苹果手机没有返回键怎么用(苹果手机没有返回键怎么返回)

    苹果手机没有返回键怎么用(苹果手机没有返回键怎么返回)

  • 苹果6s微信怎么设置暗黑模式(苹果6s微信怎么打开麦克风)

    苹果6s微信怎么设置暗黑模式(苹果6s微信怎么打开麦克风)

  • 拼多多怎么设置自动回复(拼多多怎么设置匿名买东西)

    拼多多怎么设置自动回复(拼多多怎么设置匿名买东西)

  • 云台版摄像头什么意思(摄像头云台版和普通版区别)

    云台版摄像头什么意思(摄像头云台版和普通版区别)

  • 腾讯的蓝光和臻彩区别(腾讯视频蓝光和hdr臻彩哪个好)

    腾讯的蓝光和臻彩区别(腾讯视频蓝光和hdr臻彩哪个好)

  • 黑鲨helo是几代(黑鲨helo1代)

    黑鲨helo是几代(黑鲨helo1代)

  • 小米8透明版多少w快充(小米8透明版多少克)

    小米8透明版多少w快充(小米8透明版多少克)

  • gps权限怎么开启(gps权限怎么开启的)

    gps权限怎么开启(gps权限怎么开启的)

  • 怎么将qq音乐设上密码(怎么将QQ音乐设置成铃声)

    怎么将qq音乐设上密码(怎么将QQ音乐设置成铃声)

  • 手机位置信息是否打开(手机位置信息是干嘛的)

    手机位置信息是否打开(手机位置信息是干嘛的)

  • pr怎么字幕加进入特效(pr字幕加入)

    pr怎么字幕加进入特效(pr字幕加入)

  • airpods一直放盒子吗(airpods放盒子里一直充电)

    airpods一直放盒子吗(airpods放盒子里一直充电)

  • ie浏览器如何更新升级(ie浏览器如何更改下载位置)

    ie浏览器如何更新升级(ie浏览器如何更改下载位置)

  • 支付宝怎么改实名认证(支付宝怎么改实名认证?苹果)

    支付宝怎么改实名认证(支付宝怎么改实名认证?苹果)

  • 如何在Win11中启用和禁用休眠模式(win11启动方式)

    如何在Win11中启用和禁用休眠模式(win11启动方式)

  • 关于CPU和GPU版本共存下的安装Pytorch(跑YOLO模型)(cpu和gpu性能对比)

    关于CPU和GPU版本共存下的安装Pytorch(跑YOLO模型)(cpu和gpu性能对比)

  • 织梦dedecms 内容页调用当前栏目名称的标签(织梦如何使用)

    织梦dedecms 内容页调用当前栏目名称的标签(织梦如何使用)

  • 增值税价外费用开票内容
  • 购买礼品送客户个人所得税
  • 印花税缴款怎么用银行卡支付
  • 税费退库怎么做凭证
  • 融资租赁和经营租赁的特点
  • 团建费用途
  • 累计赡养老人专项扣除6000
  • 工资发放流程以及如何记账
  • 什么是居民纳税人
  • 企业所得税逾期了一定要去税局前台申报吗
  • 支票报销是怎么操作的
  • 非货币性资产交换补价大于25%的会计处理
  • 有限合伙企业分红个人所得税
  • 未分配利润转增股本需要交税吗
  • 免费拿样品
  • 企业收到经营外的发票如何做账
  • 已认证未抵扣发票冲红流程
  • 附加税里包括地税吗
  • 吸收合并具体分录
  • 多交税款退税怎么做账
  • 股权转让流程详解
  • 收到银行存款利息记账凭证怎么写
  • 无偿取得股权账务处理
  • windows10无法连接到打印机,拒绝访问
  • 办妥托收手续会计分录
  • 捐赠视同销售为什么不确认收入?
  • 所得税到底按会计分录吗
  • 怎么设置宽带开关网络
  • dl是什么文件
  • css边框怎么做
  • 房地产行业预售制度
  • 深度学习——VGG16模型详解
  • 详解中国女足出线形势
  • 卡克斯劳坦恩酒店
  • yii2框架的优缺点
  • 出口退税逾期申报,需申报出口货物收汇情况表
  • 取得进项税发票什么时期内可以抵扣
  • 小规模纳税人出租不动产税率是5%还是3%
  • 会计报表逾期未申报
  • 现金流量表的填列方法
  • MicrosoftSQLserver2014
  • mongodb从入门到商业实战
  • 债券回售手续费是多少
  • 增值税年底抵扣
  • 原材料入库单价20000出库单价800000
  • 汽车维修行业工时标准
  • 销售收入未及时入账
  • 发票的类型分为哪几类
  • 待抵扣进项税额转出会计分录
  • 进项票未认证就申报抵扣
  • 进项税额转出的几种情况
  • 出口退税申报分录怎么写
  • 汽车折旧年限与折旧率
  • 被法院扣的钱怎么又退回来了
  • 劳务报酬税目
  • 零余额账户银行日记账
  • 未开票收入如何记账
  • 企业研制新产品
  • 企业什么情形必须签无固定期限合同
  • winxp电脑显示器亮度怎么调
  • kb4022719安装失败
  • Windows Server 2008下 驾驭拨号上网
  • linux中的rpm
  • bios的含义
  • 笔记本上的声卡
  • 苹果Mac系统怎么安装
  • centos 安装7z
  • win10怎么将任务栏图标从长条改成圆形
  • Win7系统安装教程
  • win10预览版和正式版区别
  • html中清除浮动的关键代码
  • perl -pi
  • 自定义右键属性是什么
  • jquery的checkbox,radio,select等方法小结
  • jquery悬浮弹出提示框
  • 公司跨区迁移税务查账严吗
  • 国家税务总局现任局长
  • 如何做好基层税务分局长工作
  • 独立的法人企业
  • 西藏景区门票优惠政策最新
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设