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

  • 系统无法复制粘贴(系统无法复制粘贴)(系统不能复制文件)

    系统无法复制粘贴(系统无法复制粘贴)(系统不能复制文件)

  • 荣耀30pro支持多屏协同吗(荣耀30pro支持多少瓦快充?)

    荣耀30pro支持多屏协同吗(荣耀30pro支持多少瓦快充?)

  • 微信密码是指什么呢(微信密码是啥)

    微信密码是指什么呢(微信密码是啥)

  • 抖音进度条拖不动(抖音进度条拖不动2021)

    抖音进度条拖不动(抖音进度条拖不动2021)

  • 华为荣耀30s上市时间(华为荣耀80上市时间和价格)

    华为荣耀30s上市时间(华为荣耀80上市时间和价格)

  • 快手仅作者的好友可评论(快手仅作者的好友可评论bug)

    快手仅作者的好友可评论(快手仅作者的好友可评论bug)

  • 子网掩码在哪里看(子网掩码在哪里修改)

    子网掩码在哪里看(子网掩码在哪里修改)

  • 手机终端是什么意思(智能手持终端是什么)

    手机终端是什么意思(智能手持终端是什么)

  • 佳能1000d上市时间(佳能1000d单反相机怎么样2020年)

    佳能1000d上市时间(佳能1000d单反相机怎么样2020年)

  • 家用光纤接头怎么接网线(家用光纤接头怎么接视频教程)

    家用光纤接头怎么接网线(家用光纤接头怎么接视频教程)

  • 苹果手机短信带个叹号(苹果手机短信带月牙是怎么回事)

    苹果手机短信带个叹号(苹果手机短信带月牙是怎么回事)

  • 笔记本电脑扩展坞是什么东西(笔记本电脑扩展屏幕后没声音了)

    笔记本电脑扩展坞是什么东西(笔记本电脑扩展屏幕后没声音了)

  • 128g实际容量是多少(128g实际容量是多少m)

    128g实际容量是多少(128g实际容量是多少m)

  • 华为mate30pro第一次充电需要把电用完吗(华为mate30Pro第一批多少钱)

    华为mate30pro第一次充电需要把电用完吗(华为mate30Pro第一批多少钱)

  • 手机照相机闪光灯怎么开(手机照相机闪光灯在哪)

    手机照相机闪光灯怎么开(手机照相机闪光灯在哪)

  • 手机更新系统死机了怎么办(手机更新系统卡住了)

    手机更新系统死机了怎么办(手机更新系统卡住了)

  • 关键帧的作用(抖音里关键帧的作用)

    关键帧的作用(抖音里关键帧的作用)

  • 小米nfc怎么绑定实体卡(小米nfc怎么绑定银行卡)

    小米nfc怎么绑定实体卡(小米nfc怎么绑定银行卡)

  • 红米note8pro怎么设置通知栏样式(红米note8pro怎么隐藏应用)

    红米note8pro怎么设置通知栏样式(红米note8pro怎么隐藏应用)

  • 怎么停用微信二维码收款(怎么停用微信二维码功能)

    怎么停用微信二维码收款(怎么停用微信二维码功能)

  • 腾讯视频怎么没有分享(腾讯视频怎么没有手机号登录)

    腾讯视频怎么没有分享(腾讯视频怎么没有手机号登录)

  • 红米k20Pro可以无线充电吗(红米k20 pro能无线充电吗)

    红米k20Pro可以无线充电吗(红米k20 pro能无线充电吗)

  • ie浏览器如何安装插件(ie浏览器如何安装驱动)

    ie浏览器如何安装插件(ie浏览器如何安装驱动)

  • 申报个体经营所得税时营业外收入怎么填
  • 固定资产二级科目取消原因
  • 如何确定一个企业在网络营销中的目标受众?
  • 取用备用金要188分
  • 计提应收的增值税返还
  • 买金税盘怎么做账
  • 营改增后还有企业所得税吗?
  • 购销合同赔偿比例一般多少
  • 税务注销后还能稽查吗
  • 咨询服务费记到什么科目
  • 贴现的利息能不能取出来
  • 个人出租房屋税率表2023年
  • 企业所得税预缴政策
  • 出口收入转内销后汇率
  • 企业经营者试行什么制度
  • 公司认缴增资需要什么流程呢
  • 资产负债表里应交税费里都包含什么
  • 非公司员工缴纳社保有什么影响
  • 企业已交地税税金如何做账务处理?
  • 电子承兑转出后多久到账
  • 期末留抵税额怎么做账
  • 招投标费用如何收取
  • 企业计提的坏帐会计分录
  • mac双系统删除window后怎么重新恢复
  • windows11下载后怎么安装
  • 一次性收取一年租金
  • 收到增值税红字发票怎么入账
  • 怎么解决在澳洲吸烟
  • mom.exe是什么进程
  • 建安企业所得税怎么算2.25税率
  • 房地产会计核算地上地下成本分摊
  • 会计凭证设计要注意的问题
  • 采购预算测算依据
  • 施工企业会计核算特点有哪些
  • 什么是重大会计事务所
  • 上市公司回购股票意味着什么
  • 为什么运输合同比租赁合同风险小
  • css calculate
  • 各浏览器主页的网址
  • 前端实战开发
  • php接口开发详解
  • php hash_hmac
  • 个体工商户开普通发票需要交税吗
  • js执行上下文的概念
  • mysql的基本介绍
  • 财务上大写数字420.1怎么写
  • 应交税费明细账登记图
  • sql2008怎么查询
  • 编制记账凭证的步骤
  • 实收资本或股本什么意思
  • 股票股利应该何时分摊
  • 金税盘抵扣在申报表哪填
  • 业务招待费需附上清单
  • 销售成本的结转
  • 预付货款属不属于消费信用
  • 重大影响包括50%吗
  • 资产状况信息公示还是不公示
  • 换工作时社保公积金怎么办
  • 会计记账凭证样本
  • sql汇总查询
  • sqlite迁移到mysql脚本的方法
  • win7系统安全在哪
  • 使用命令行 -devmode
  • mac蓝牙连接iphone有什么用
  • win8无法打开ie
  • win7软件界面显示不全怎么办
  • python挑战
  • unity3d的
  • css里注释
  • js移动端拖拽
  • 处理判断字符串是否相等
  • vue3目录解析
  • 浏览器窗口上线怎么办
  • python中怎么取整数的某位数
  • python中的整数
  • 安徽国税app
  • 残疾人企业如何申请补贴
  • 北京摇号摇中了能过户吗
  • 苏州税务系统
  • 即使我单位是免税单位,签订合同时,也需要贴
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设