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

  • 2605d硒鼓清零(联想lj2605d硒鼓灯亮)

    2605d硒鼓清零(联想lj2605d硒鼓灯亮)

  • 怎样查看用过的微信头像(怎样查看用过的wifi)

    怎样查看用过的微信头像(怎样查看用过的wifi)

  • 安卓微信黑色主题怎么取消(安卓微信黑色主题下载)

    安卓微信黑色主题怎么取消(安卓微信黑色主题下载)

  • iphone6屏幕一直亮怎么办(苹果6p屏幕一直转圈怎么回事)

    iphone6屏幕一直亮怎么办(苹果6p屏幕一直转圈怎么回事)

  • qq音乐版权限制什么意思(qq音乐版权限制破解)

    qq音乐版权限制什么意思(qq音乐版权限制破解)

  • 华为荣耀9x可以开空调吗(华为荣耀9X可以投屏吗)

    华为荣耀9x可以开空调吗(华为荣耀9X可以投屏吗)

  • 数码产品包含哪些(数码产品包含哪些品牌)

    数码产品包含哪些(数码产品包含哪些品牌)

  • 群代办和群公告区别(群代办和群公告的区别)

    群代办和群公告区别(群代办和群公告的区别)

  • plc选型的主要依据(plc的选用原则是什么?)

    plc选型的主要依据(plc的选用原则是什么?)

  • 退出微信群聊会显示吗(退出微信群聊会有人知道吗)

    退出微信群聊会显示吗(退出微信群聊会有人知道吗)

  • 小米的智能精灵叫什么(小米智能精灵怎么称呼它)

    小米的智能精灵叫什么(小米智能精灵怎么称呼它)

  • 探探里的闪聊是什么(探探闪聊收费吗)

    探探里的闪聊是什么(探探闪聊收费吗)

  • 三星手机如何截屏截图(三星手机如何快速截屏)

    三星手机如何截屏截图(三星手机如何快速截屏)

  • word文档表格加一列(word文档表格加一行)

    word文档表格加一列(word文档表格加一行)

  • 多媒体设备包括哪些(多媒体设备包括打印机吗)

    多媒体设备包括哪些(多媒体设备包括打印机吗)

  • 华为mate30有无线充电功能吗(华为mate30有无线充电怎么用)

    华为mate30有无线充电功能吗(华为mate30有无线充电怎么用)

  • iphonex上市时间(iphoneXr上市时间和价格)

    iphonex上市时间(iphoneXr上市时间和价格)

  • word文档添加目录链接(Word文档添加目录后怎么删除标题前面的点)

    word文档添加目录链接(Word文档添加目录后怎么删除标题前面的点)

  • 数据中心是指什么(数据中心是指什么意思)

    数据中心是指什么(数据中心是指什么意思)

  • 手机qq背景怎么自定义(手机qq背景怎么变成黑色的了)

    手机qq背景怎么自定义(手机qq背景怎么变成黑色的了)

  • nova5pro自带耳机吗(nova 5i pro耳机)

    nova5pro自带耳机吗(nova 5i pro耳机)

  • 滴滴出行拼车怎么操作(滴滴出行拼车怎么改目的地)

    滴滴出行拼车怎么操作(滴滴出行拼车怎么改目的地)

  • 陌陌版本beta已过期什么意思(陌陌该版本已停止服务请升级)

    陌陌版本beta已过期什么意思(陌陌该版本已停止服务请升级)

  • 腾讯视频gif保存在哪(腾讯视频gif保存完在相册找不到)

    腾讯视频gif保存在哪(腾讯视频gif保存完在相册找不到)

  • 微信如何备注手机联系人(微信如何备注手机号码)

    微信如何备注手机联系人(微信如何备注手机号码)

  • Linux下进程管理工具Supervisor的安装配置和基本使用(linux进程管理器)

    Linux下进程管理工具Supervisor的安装配置和基本使用(linux进程管理器)

  • nerosvc.exe - nerosvc是什么进程 有什么用

    nerosvc.exe - nerosvc是什么进程 有什么用

  • 深聊测试开发之:从订单支付流程来聊一聊,如何预防重复支付,建议收藏。(深度测试软件)

    深聊测试开发之:从订单支付流程来聊一聊,如何预防重复支付,建议收藏。(深度测试软件)

  • 出口退税一般退什么税
  • 长租公寓 税费
  • 价税合计金额怎么算出税额
  • 职工薪酬实际金额包括发放往年工资吗
  • 营业外收入交企业所得税可以扣除成本么
  • 公司两年账没做
  • 认购股份有什么好处
  • 预收款转营业外收入条件
  • 电子税务局上财务制度备案错误是啥意思
  • 一般增值税纳税人和小规模纳税人
  • 当留底税额大于退税额会计分录怎么写?
  • 预收保费属于什么会计科目类别
  • 结算本月应付职工薪酬,其中生产工人工资为18000
  • 初始数据试算表不平衡的原因
  • 银行存款收款凭证是原始凭证吗
  • 计提递延所得税的会计分录
  • 残保基金属税金怎么算
  • 2017年全国税收收入是多少
  • 固定资产进项发票可以抵扣吗为什么
  • 公司法人如何从公司提钱
  • 出差报销差旅
  • 残联备案还能补申报吗
  • windows10开机很卡
  • 鸿蒙系统大文件夹怎么调节大小
  • 异地增值税预交可以网上缴纳吗
  • 开房租发票交的税,因优惠政策退税,怎么账务处理
  • Win11 Build10.0.22000.51预览版正式推送 (附完整更新日志)
  • 免征的增值税需要纳税调整吗
  • 未分配利润进行利润分配分录
  • 结算劳务外包的工作内容
  • 企业内部研究开发项目开发阶段的支出
  • 企业所得税季度预缴是什么意思
  • vue项目如何配置启动的端口
  • 如何知道是干皮还是油皮
  • 机器学习中的数学原理——对数似然函数
  • zentaophp框架
  • 小满秒懂百科
  • 路由加载的几种方式
  • 如何在idea中创建xml
  • 免征个人所得税33种情形
  • phpcms默认密码
  • 法人给对公账户转账
  • 收取违约金能作为合同自动终止要件吗
  • 公司向法人借款需要多久还清
  • sqlserver存储过程声明变量
  • 小规模企业免征增值税如何申报
  • 什么是简易征收?其公式是什么?
  • 出差的招待费算差旅费
  • 小规模纳税人免税政策2023年
  • 增值税小规模纳税人2023年政策
  • 安装防伪税控系统的方法
  • 股权变更的股东个税缴纳
  • 财务费用减少记借方还是贷方
  • 资产减值损失如何计提
  • 分支机构与总机构怎么纳税?
  • 今年成立的公司需要申报残疾人保障金吗
  • 生产型企业出口退税计算
  • 生产经营年度汇算清缴
  • 综合所得的个人所得税有哪些筹划技巧
  • 财务报表分析的目的
  • 工会经费的计提与缴纳
  • 在mysql中使用mysql workbench创建数据库
  • 如何查看windows2008修改密码日志
  • mac10.15系统
  • dockers容器
  • linux swap分区必须吗
  • Win7打印机安装
  • win7系统在电源选项找不到屏幕亮度
  • 注册表 windows
  • win7怎连蓝牙
  • 环境篇-幸福家庭是孩子心灵健康的关键.mp3
  • 批处理 /b
  • 如何实现左侧固定,右侧自适应的布局
  • jquery二级导航栏
  • python中简单的例子
  • 电子税务局无法显示抵扣发票
  • 贤彬考研,刘磊?
  • 税务稽查总队
  • 乐陵到德州多远距离
  • 交强险和车船税网上购买
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设