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

  • 从QQ付费群改版来看今后QQ群怎样做(qq付费群规则)

    从QQ付费群改版来看今后QQ群怎样做(qq付费群规则)

  • 请为你的父母骄傲(请为你的父母骄傲梧桐)

    请为你的父母骄傲(请为你的父母骄傲梧桐)

  • 华为nova9双卡怎么放(华为nova9双卡怎么装)

    华为nova9双卡怎么放(华为nova9双卡怎么装)

  • 淘宝商品怎么发链接给朋友(淘宝商品怎么发布)

    淘宝商品怎么发链接给朋友(淘宝商品怎么发布)

  • vivo NEX 3s是用什么接口(vivo nex 3s参数配置)

    vivo NEX 3s是用什么接口(vivo nex 3s参数配置)

  • 抖音拉黑能看对方吗(抖音拉黑能看对方在线吗)

    抖音拉黑能看对方吗(抖音拉黑能看对方在线吗)

  • 信号基站辐射范围是多少米(信号基站的辐射量有多大)

    信号基站辐射范围是多少米(信号基站的辐射量有多大)

  • ipad充电器可以充iphone吗(ipad充电器可以充华为手机吗)

    ipad充电器可以充iphone吗(ipad充电器可以充华为手机吗)

  • 微信信息可以定时自动发送出去吗(微信信息可以定时发送吗苹果)

    微信信息可以定时自动发送出去吗(微信信息可以定时发送吗苹果)

  • 平板自动跳屏怎么回事(平板屏幕自动跳转)

    平板自动跳屏怎么回事(平板屏幕自动跳转)

  • 微信短期封号能聊天吗(微信短期封号还能聊天吗)

    微信短期封号能聊天吗(微信短期封号还能聊天吗)

  • 三星f7000折叠手机是双卡双待吗(三星f7000折叠手机参数)

    三星f7000折叠手机是双卡双待吗(三星f7000折叠手机参数)

  • 该站点长时间无响应是什么意思(该站点长时间无响应,点击刷新 了解异常详情)

    该站点长时间无响应是什么意思(该站点长时间无响应,点击刷新 了解异常详情)

  • 钉钉群主退出后谁是群主(钉钉群主退出后谁会成为新群主)

    钉钉群主退出后谁是群主(钉钉群主退出后谁会成为新群主)

  • 苹果7p保修期多久(iphone7plus保修期)

    苹果7p保修期多久(iphone7plus保修期)

  • 申请抖音号怎么申请(申请抖音号怎么弄啊)

    申请抖音号怎么申请(申请抖音号怎么弄啊)

  • iqoo6g和8g区别(iqoo6g和8g哪个值得买)

    iqoo6g和8g区别(iqoo6g和8g哪个值得买)

  • 手机拔号键如何恢复(手机拔号键有什么功能)

    手机拔号键如何恢复(手机拔号键有什么功能)

  • win10杀毒软件怎么打开(win10 杀毒软件)

    win10杀毒软件怎么打开(win10 杀毒软件)

  • 苹果xs广角镜头怎么用(iphonexs广角镜头怎么开0.5)

    苹果xs广角镜头怎么用(iphonexs广角镜头怎么开0.5)

  • 红米note9什么时候出

    红米note9什么时候出

  • ip报头的目的地址表示的是什么(ip报头的目的地址)

    ip报头的目的地址表示的是什么(ip报头的目的地址)

  • 怎么下载第二个微信到手机(怎么下载第二个微信)

    怎么下载第二个微信到手机(怎么下载第二个微信)

  • 移动号码空号了怎么恢复(移动号码空号了还要交欠费吗)

    移动号码空号了怎么恢复(移动号码空号了还要交欠费吗)

  • 小米商城碎屏险怎么买(小米商城碎屏险和支付宝碎屏险)

    小米商城碎屏险怎么买(小米商城碎屏险和支付宝碎屏险)

  • 没有win10激活码怎么办?9月最新win10永久密钥推荐 附激活工具 亲测(window10没有激活码)

    没有win10激活码怎么办?9月最新win10永久密钥推荐 附激活工具 亲测(window10没有激活码)

  • 自动售货机进货渠道
  • 公司账户进账必须交税吗
  • 个税中房屋租赁日期写长跟写短
  • 资产处置收益对应科目
  • 取得经营所得需要纳税人自行申报嘛
  • 预算报表分析报告
  • 保险公司代扣代缴车船税完税证明
  • 幼儿园收取生活费通知
  • 进口代理费取费标准
  • 企业发生的间接生产费用应
  • 价外费用如何开普票
  • 应收账款减值准备可以税前扣除吗
  • 应收账款的产生之一是由于销售
  • 节能减排奖励资金追回
  • 调拨资产入账按原值还是按净值
  • 个人证券交易结算资金
  • 购买东西收据
  • 企业集团内部各所属单位之间
  • 进项税额能抵扣的几种情形
  • i5 8500装win10
  • 光伏发电 电费
  • 商标注册费相关法律法规
  • php数组函数有哪些
  • 使用筷子就餐会不会传染乙肝病毒
  • php抓取网页指定内容
  • 股权转让有哪些股
  • rk3328 sdk
  • rundll32.exe进程很多
  • 财政扶持企业政策
  • 薏米红豆粥的做法视频
  • 来料加工业务的会计处理
  • 税控盘每年的服务费可以抵扣吗
  • 债券利息调整怎样计算
  • 应交税金应交增值税科目设置
  • 公司企业名称变更,银行账号会变吗
  • ant desgin-vue
  • php文本统计访问量
  • php获取访问者mac地址
  • php imagefill
  • 不征税收入的账务处理
  • 企业日常费用支出明细表
  • 筹建期的收入要交企业所得税吗
  • 工会经费计提按应付职工薪酬借方还是贷方?
  • 收到服务费的增值税发票
  • 税收分类编码是什么意思啊
  • sql纵表转横表
  • 对企业发票的监管
  • 库存商品过期报废会计分录
  • 接受捐赠的材料计入什么科目
  • 收到预收款并已付款
  • 销售材料购买方会计分录
  • 人力资源公司劳务费发票税率
  • 收到的稳岗补贴要交企业所得税吗
  • 标准成本法计算公式图
  • 从业人数和资产总额指标,应按企业
  • 股东股权转让会计分录
  • 如何办icp许可证
  • 购买土地会计分录及摊销分录
  • 如何设置生产成本总账表格
  • mysql深入理解
  • mysql绿色版配置
  • linux的总结
  • Ghost XP SP3 YN8.0装机版 (雨林木风)
  • 局域网下访问vue点击无反应
  • win10打不开应用市场
  • 手机弹窗游戏
  • javascript例题
  • jquery搜索页面内容
  • Error: String types not allowed (at 'layout_gravity' with value 'bottom/center_horizontal').
  • bat批处理文件运行不了
  • 提高网站性能
  • unity 调用java
  • shell脚本简单例子
  • node.js的express
  • python二叉树
  • 完美解决usb电涌15秒后关机
  • dom操作中获取节点的方法有哪几种
  • 土地增值税可否免税
  • 贵州国家税务局陈开平
  • 境外个人税务备案登记表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设