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

  • 米家车载空气净化器怎么连接(米家车载空气净化器)

    米家车载空气净化器怎么连接(米家车载空气净化器)

  • 程序设计语言基本要素(程序设计语言基本功能)

    程序设计语言基本要素(程序设计语言基本功能)

  • g5420相当于i几(g5420相当于i几代i5)

    g5420相当于i几(g5420相当于i几代i5)

  • iphone11如何设置相册锁(iphone11如何设置电量显示)

    iphone11如何设置相册锁(iphone11如何设置电量显示)

  • 华为p40可以无线反向充电吗(华为p40可以无线反充电吗)

    华为p40可以无线反向充电吗(华为p40可以无线反充电吗)

  • 喇叭声音沙哑怎么修(喇叭声音沙哑怎么调)

    喇叭声音沙哑怎么修(喇叭声音沙哑怎么调)

  • cpu睿频是自动开的吗(cpu睿频开还是关闭好 贴吧)

    cpu睿频是自动开的吗(cpu睿频开还是关闭好 贴吧)

  • ps吸颜色用什么键(ps的吸色怎么用)

    ps吸颜色用什么键(ps的吸色怎么用)

  • 天马屏是什么意思(天马屏优缺点)

    天马屏是什么意思(天马屏优缺点)

  • 华为nova3e拍照能连拍吗(华为nova3e拍照像素不清晰怎么办)

    华为nova3e拍照能连拍吗(华为nova3e拍照像素不清晰怎么办)

  • 如何在猪八戒网上接单(如何在猪八戒网上招聘员工工作)

    如何在猪八戒网上接单(如何在猪八戒网上招聘员工工作)

  • 手机爱奇艺怎么小窗口播放(手机爱奇艺怎么扫码登录会员)

    手机爱奇艺怎么小窗口播放(手机爱奇艺怎么扫码登录会员)

  • 华为畅享9plus手机录屏在哪里(华为畅享9plus手机卡顿怎么解决)

    华为畅享9plus手机录屏在哪里(华为畅享9plus手机卡顿怎么解决)

  • 音箱没有声音如何排除故障(音箱没有声音如何修复)

    音箱没有声音如何排除故障(音箱没有声音如何修复)

  • 哈罗单车押金退款怎么退(哈罗单车押金退款流程)

    哈罗单车押金退款怎么退(哈罗单车押金退款流程)

  • 华为卡顿怎么设置(如何让华为手机卡顿)

    华为卡顿怎么设置(如何让华为手机卡顿)

  • 聚美优品如何分期付款(聚美优品的模式)

    聚美优品如何分期付款(聚美优品的模式)

  • 安卓手机电话号码怎么复制到卡上(安卓手机电话号码转移到苹果)

    安卓手机电话号码怎么复制到卡上(安卓手机电话号码转移到苹果)

  • 电脑上不去游戏是怎么回事?怎么才能正常玩游戏?(电脑游戏没法玩怎么办)

    电脑上不去游戏是怎么回事?怎么才能正常玩游戏?(电脑游戏没法玩怎么办)

  • Mac OS X怎么共享公共文件夹以外的文件夹?(mac怎么共享文件)

    Mac OS X怎么共享公共文件夹以外的文件夹?(mac怎么共享文件)

  • 最贵的苹果电脑是什么(最贵的苹果电脑99万)

    最贵的苹果电脑是什么(最贵的苹果电脑99万)

  • vue3的路由传参query、params以及动态路由传参(vue路由传参的几种方式)

    vue3的路由传参query、params以及动态路由传参(vue路由传参的几种方式)

  • 33.JavaScript映射与集合(Map、Set)数据类型基础知识介绍与使用

    33.JavaScript映射与集合(Map、Set)数据类型基础知识介绍与使用

  • 残疾人保证金计算器
  • 附加税申报表里怎么填写
  • 处置投资性房地产对损益的影响
  • 房租收入怎么报税
  • 街道办事处发票抬头写什么
  • 多缴的企业所得税办理退税怎么处理
  • 残疾证挂靠一年多少钱
  • 融资租赁承租方会计账务处理流程
  • 小规模纳税人计提增值税
  • 出口货物保险免税
  • 企业所得税扣除项目及标准
  • 免税苗木发票如何抵扣计算
  • 取得运输部门开具的增值税专用发票
  • 施工分包分为哪些
  • 扣押属于纳税担保吗
  • 税务局返还的代征代扣要交增值税吗
  • 已认证未抵扣发票冲红流程
  • 营改增后小规模ktv怎么纳税
  • 开具增值税专用发票和普通发票的区别
  • 免税增值税发票怎么做账
  • 外包人员培训费入什么科目
  • 工会票据电子化管理系统如何领发票
  • 如何在win10中同步我的设置
  • 私账的钱怎么弄到公账
  • linux系统用法
  • mac如何编译c语言
  • 公司债务转个人债务
  • 股权和债权转让的关系
  • 享受企业所得税优惠政策的农产品初加工范围
  • 差额征收是啥意思
  • 职工教育经费会计准则最新规定
  • 解决办法总比困难多
  • linux多网卡聚合
  • PHP:JewishToJD()的用法_日历函数
  • 井冈山游击队的口号
  • 租赁公司的
  • 内存分配理解是什么
  • yolo算法百度百科
  • 通行发票可以抵增值税吗
  • /f命令
  • 免税农业企业所得税怎样填报
  • 合同印花税可以年底报一次
  • 企业净利润归谁所有
  • 前端培训费用大概多少
  • 厂区道路折旧年限最新规定
  • 企业出售房屋
  • 营业税和营业税额一样吗
  • 出现什么情况企业不能持续经营
  • 用于员工福利的专票可以抵扣吗
  • 车险代买的出了事故怎么办
  • 现金返利的会计分录
  • 合并财务报表内部往来如何抵消
  • 成品油发票如何作废
  • 出口抵减内销产品应纳税额分录
  • 不需要计提折旧的情况
  • 权益净利率计算公式产权比率
  • 车辆购置税完税证明图片
  • 现金股利征收个人所得税吗
  • 对公账户付个人工资怎么入账
  • 发票的几种分类
  • 民办非企业单位有哪些
  • 建造合同收入
  • 职工教育经费的差旅费可以抵扣吗
  • sql server.
  • mac个性定制在哪
  • windows打开
  • springmvc接收form表单
  • unitysharder
  • Js组件开发方式
  • nodejs爬虫框架crawler
  • unity编译原理
  • python flask快速入门与进阶
  • nodejs微信公众号开发
  • pythone爬虫
  • 蓝色的css代码
  • 怎么打印历史发票
  • 开展和组织开展什么区别
  • 江苏钢厂排名前十
  • 进出口备案登记表是哪个部门发的
  • 广东省东莞电子税局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设