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

  • 查手机号用了多少年(查手机号)(查手机号用了多少年)

    查手机号用了多少年(查手机号)(查手机号用了多少年)

  • 荣耀play电池多少毫安(荣耀play电池寿命)

    荣耀play电池多少毫安(荣耀play电池寿命)

  • 小米10充满电会显示已充满的字样吗(小米10充满电会自动开机吗)

    小米10充满电会显示已充满的字样吗(小米10充满电会自动开机吗)

  • 微信二狗表情怎么发(微信二狗表情怎么弄)

    微信二狗表情怎么发(微信二狗表情怎么弄)

  • jdn2-w09是什么型号(jdn2-w09是什么型号几寸)

    jdn2-w09是什么型号(jdn2-w09是什么型号几寸)

  • 芒果tv骑士卡是什么

    芒果tv骑士卡是什么

  • 荣耀30s微信视频怎么开美颜(荣耀30S微信视频美颜功能在哪里设置)

    荣耀30s微信视频怎么开美颜(荣耀30S微信视频美颜功能在哪里设置)

  • 微信深圳通不能搭地铁怎么办(微信深圳通怎么用不了)

    微信深圳通不能搭地铁怎么办(微信深圳通怎么用不了)

  • 苹果相机录像功能没了(苹果相机录像功能不见了)

    苹果相机录像功能没了(苹果相机录像功能不见了)

  • 打开volte和关闭volte有什么区别(关闭volte开关)

    打开volte和关闭volte有什么区别(关闭volte开关)

  • 华为p40pro指纹解锁位置可以调吗(华为p40pro指纹解锁是什么技术)

    华为p40pro指纹解锁位置可以调吗(华为p40pro指纹解锁是什么技术)

  • 抖音截流是什么意思(抖音截流获客软件)

    抖音截流是什么意思(抖音截流获客软件)

  • qq提交作业别人会不会看到(qq提交作业别人能看到吗)

    qq提交作业别人会不会看到(qq提交作业别人能看到吗)

  • 抖音在线怎么开启(抖音在线怎么开关)

    抖音在线怎么开启(抖音在线怎么开关)

  • pe膜是什么膜(卫生巾里的pe膜是什么膜)

    pe膜是什么膜(卫生巾里的pe膜是什么膜)

  • 美老师证件照为什么下载失败(美老师证件照上传上不去啥原因)

    美老师证件照为什么下载失败(美老师证件照上传上不去啥原因)

  • 华为荣耀8a怎么分屏(华为荣耀8a怎么没有应用分身)

    华为荣耀8a怎么分屏(华为荣耀8a怎么没有应用分身)

  • 苹果11为什么没有电池百分比(苹果11为什么没有专注模式)

    苹果11为什么没有电池百分比(苹果11为什么没有专注模式)

  • 电脑hz是什么意思(电脑hz高有什么好处)

    电脑hz是什么意思(电脑hz高有什么好处)

  • 三摄像头有什么用(什么叫三摄像头手机)

    三摄像头有什么用(什么叫三摄像头手机)

  • 华为微信扫一扫黑屏怎么回事(华为微信扫一扫不能用怎么回事)

    华为微信扫一扫黑屏怎么回事(华为微信扫一扫不能用怎么回事)

  • 淘宝店上传宝贝图片步骤(淘宝店上传宝贝图片用手机拍可以吗)

    淘宝店上传宝贝图片步骤(淘宝店上传宝贝图片用手机拍可以吗)

  • 闲鱼如何使用蚂蚁花呗(闲鱼如何开通蚂蚁森林)

    闲鱼如何使用蚂蚁花呗(闲鱼如何开通蚂蚁森林)

  • vivoy93按哪个键关机(vivoy93操作说明)

    vivoy93按哪个键关机(vivoy93操作说明)

  • java如何指定枚举的行为(java枚举写法)

    java如何指定枚举的行为(java枚举写法)

  • 印花税纳税义务人有哪些
  • 进口货物账务如何处理
  • 增值税的专用发票含税吗
  • 无合同销售收入怎么算
  • 年金是否一定是每年发生一次
  • 个税返还手续费奖励员工需要交个税吗
  • 房产税没交会怎么样
  • 厂房推倒重建房产税
  • 支付城镇土地使用税会计科目
  • 差旅费应纳入社保缴费基数吗?
  • 微信支付的钱到哪里去了
  • 货运发票和提供建筑服务的专票备注怎么写?
  • 公车保险费可以抵扣吗
  • 新公司注册后先开户还是先税务登记
  • 本期销售额未达起征点请将本期应纳税额
  • 费用报销单的日期
  • 应收账款出售给银行
  • 利润分配在利润表中如何列示
  • 营改增后挂靠工程会计分录具体怎么做?
  • 销售差异计算公式
  • xbox无法连接无线网络
  • sinutrain破解版
  • php实现上传图片到数据库
  • php curl post请求
  • 私营合伙企业个税怎么算
  • 土地使用税的税目写什么
  • 电脑故障检测与维护方法
  • 苹果macOSBigSur是什么型号
  • 控股公司的账务处理
  • 公司整体收购缴税
  • 企业收到的保险理赔款会计分录
  • php正则替换字符串
  • 持有至到期投资科目被取消了吗
  • 委托证券公司发行股票的手续费计入什么科目
  • vue中methods的作用
  • 基于stm32的毕业设计
  • 盈余公积转增会计分录
  • 发票清单怎么导出
  • 保障金计入什么科目
  • 利润表净利润等于未分配利润吗
  • 年终奖是以工资形式发放吗
  • 合同资产科目包含增值税吗
  • 总承包可以转包吗
  • 差旅费适用税率
  • 综合所得减除费用标准
  • 资产处置收益的核算内容
  • 收到费用发票没有付款的会计分录
  • 管理费用如何冲减
  • 余利宝本金会亏吗
  • 员工在异地缴纳社保,公司还能上吗
  • 固定资产出售账面价值计入什么科目
  • 土地收储款是谁给谁
  • 行政单位合并财务怎么办
  • 回购股票并注销是利好吗
  • 专用发票与普通发票图片
  • 残保金计算人数1.02怎么计算
  • mysql 5.6.26 winx64安装配置图文教程(一)
  • sqlserver怎么用
  • win7系统如何打开
  • QQExternal.exe是什么进程?QQExternal.exe进程为什么被运行?
  • windowsxp怎么用
  • win10 outlook邮箱设置教程
  • 简单射击原理
  • 微信小程序tabbar字体颜色
  • batfor循环里变量计算
  • jquery移出class
  • node.js express koa
  • js中alert怎么用
  • 四川省地方税务局2017年1号公告
  • 周报要素
  • 企业所得税到底是卖方承担还是买方承担
  • 企业承包经营责任制
  • 广东省电子税务局电话
  • 审计如何聚焦主责主业
  • 无锡市高新区税务局张贤平
  • 起诉公司需要法人信息吗
  • 开票系统服务器设置
  • 蜀山区税务局网站首页
  • 地方税务局发票管理所
  • 大连国家税务局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设