位置: 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二级菜单的隐藏与显示)

  • java entry(java entry数组)

    java entry(java entry数组)

  • 支付宝怎么代领孩子健康码(支付宝怎么代领孩子的电子社保卡)

    支付宝怎么代领孩子健康码(支付宝怎么代领孩子的电子社保卡)

  • 云班课可以开小窗吗(云班课开小窗)

    云班课可以开小窗吗(云班课开小窗)

  • 如何查看别人音浪(在哪里可以看到别人的音浪)

    如何查看别人音浪(在哪里可以看到别人的音浪)

  • 美图秀秀视频可以录多久(美图秀秀视频可以放多少张照片)

    美图秀秀视频可以录多久(美图秀秀视频可以放多少张照片)

  • 主板b360和b365区别(主板b360和b365哪个好)

    主板b360和b365区别(主板b360和b365哪个好)

  • 华为nova6手机怎么控制空调开关(华为nova6手机怎么遥控空调)

    华为nova6手机怎么控制空调开关(华为nova6手机怎么遥控空调)

  • 三星980相当于骁龙多少(三星980相当于骁龙的哪个型号)

    三星980相当于骁龙多少(三星980相当于骁龙的哪个型号)

  • 华为p40谷歌服务怎么安装(华为p40谷歌服务怎么关闭)

    华为p40谷歌服务怎么安装(华为p40谷歌服务怎么关闭)

  • p30快充规格是多少(华为p30快充是多少)

    p30快充规格是多少(华为p30快充是多少)

  • 小米手机接听电话声音小怎么回事(小米手机接听电话方式怎么设置)

    小米手机接听电话声音小怎么回事(小米手机接听电话方式怎么设置)

  • medly安卓闪退(medly安卓版下载教程)

    medly安卓闪退(medly安卓版下载教程)

  • oppoa79如何重启手机(oppoa72怎么重启)

    oppoa79如何重启手机(oppoa72怎么重启)

  • 华为p40限量套装是什么(华为p40限量版套装)

    华为p40限量套装是什么(华为p40限量版套装)

  • qq如何隐藏消息内容(qq如何隐藏消息通知内容)

    qq如何隐藏消息内容(qq如何隐藏消息通知内容)

  • 运算器alu的功能是(运算器alu全称)

    运算器alu的功能是(运算器alu全称)

  • 美图秀秀怎么搞证件照(美图秀秀怎么搞模糊)

    美图秀秀怎么搞证件照(美图秀秀怎么搞模糊)

  • 怎么投诉拼多多商家(怎么投诉拼多多平台直接退款给买家)

    怎么投诉拼多多商家(怎么投诉拼多多平台直接退款给买家)

  • 手机进酒精了怎么处理(手机进酒精了怎么处理比较好)

    手机进酒精了怎么处理(手机进酒精了怎么处理比较好)

  • 京东金融证件审核多久(京东金融证件审核大概多久)

    京东金融证件审核多久(京东金融证件审核大概多久)

  • 快手怎么删除自己的粉丝(快手怎么删除自己私密的作品)

    快手怎么删除自己的粉丝(快手怎么删除自己私密的作品)

  • 学信网身份证号码重复怎么办(学信网身份证号码x怎么输入)

    学信网身份证号码重复怎么办(学信网身份证号码x怎么输入)

  • 如何调节小爱灵敏度(怎么把小爱同学的灵敏度调高一点)

    如何调节小爱灵敏度(怎么把小爱同学的灵敏度调高一点)

  • 华为手机车钥匙功能在哪里(华为手机车钥匙怎么配对)

    华为手机车钥匙功能在哪里(华为手机车钥匙怎么配对)

  • 电脑开机弹出很多广告窗口解决方法(电脑开机弹出很多广告窗口怎么办win10)

    电脑开机弹出很多广告窗口解决方法(电脑开机弹出很多广告窗口怎么办win10)

  • 【YOLO】YOLOv8实操:环境配置/自定义数据集准备/模型训练/预测(yolov5m)

    【YOLO】YOLOv8实操:环境配置/自定义数据集准备/模型训练/预测(yolov5m)

  • 【web服务】nginx为什么这么受企业欢迎?看完这边文章你就懂了(nginx webservice)

    【web服务】nginx为什么这么受企业欢迎?看完这边文章你就懂了(nginx webservice)

  • 银行代发工资必须交社保吗
  • 累计净值包含业务收入吗
  • 核定征收可以不开免税普票吗
  • 电子承兑到期怎么操作流程
  • 利息收入需要交印花税吗
  • 工厂筹建期间购房合法吗
  • 广告费和业务宣传费15%还是30%
  • 个体工商户个人所得税怎么申报
  • 会计凭证整理的要求有哪些
  • 卖二手车发票如何做账?
  • 固定资产折旧摊销表A105080
  • 施工图审查费谁出
  • 购买货物运费怎么做分录
  • 合伙企业需要交企业所得税吗?
  • 小区物业费开票名称
  • 土地增值税纳税地点
  • 商品按照售价金额核算法进行日常核算
  • 职工报销费用的处理流程
  • 原材料采购的会计核算风险
  • 建筑企业所得税怎么算举例说明
  • 纺织厂收购棉花如何计税?
  • 出口旧设备最新政策
  • mac系统如何连接北通手柄
  • linux中!
  • 暂估材料太多怎么办
  • 事业基金的主要账务处理
  • 公司收到银行转账会计分录
  • 手机如何测试网络稳定性
  • xshell怎么用vim
  • 快启动u盘装系统教程
  • win11预览版体验
  • php 字符串 数组
  • 为员工租赁房屋产生的租赁费可以抵扣增值税和所得税吗
  • 存货 计价
  • 高德地图api获取当前经纬度的城市地图
  • 租赁经营账务处理办法
  • 流转税的计税依据有哪些
  • 增值税发票进项抵扣怎么操作
  • vue方法顺序执行
  • 实收资本和注册资本不一致的会计处理
  • 购买方收到红字发票如何冲成本
  • css怎么调用
  • 处置资产的账务处理
  • 想学web前端
  • vue鼠标悬浮菜单
  • 帝国cms如何使用
  • 劳务费发票是不是专票
  • 深入浅析SQL Server 触发器
  • mongodb使用场景 简书
  • 固定资产清理怎么做账务处理
  • 其他应付款转实收资本股东会决议
  • 一行的代码
  • 2020新个税申报流程
  • 所得税营业成本包括管理费用吗
  • 珠宝行业的会计处理方式
  • 小规模纳税人采购需要发票吗
  • 出差人员的住宿费计入什么科目
  • 资产减值损失属于损益类的收入还是费用
  • 建筑简易征收适用哪些业务
  • 现金日记账和银行存款日记账必须逐日结出余额
  • 商业企业注销应检查哪方面的问题
  • mysql求两个字段的和
  • Linux环境下MySQL服务器优化的方法详解
  • mac os如何安装软件
  • win8.1语言包下载
  • mac修改默认系统
  • win7桌面整理软件
  • windows xp
  • linux测试端口连接
  • compress与uncompress参数使用
  • ios平台中glsl中shadow2DProjEXT函数的简单说明以及变换矩阵的小注意点
  • 如何选择适合你的颂钵
  • javascriptz
  • javascript用处
  • jQuery Ajax 上传文件处理方式介绍(推荐)
  • 哪些润滑油属于润滑剂
  • 医保12333查询系统
  • 网上新办税务操作流程
  • 国家税务总局遴选拟录取名单
  • 以房产作价投资增值税怎么算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设