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

  • 尼康d610(尼康d60报价)(尼康d610使用感受)

    尼康d610(尼康d60报价)(尼康d610使用感受)

  • 微信怎么直接发文字朋友圈(微信怎么直接发表情包)

    微信怎么直接发文字朋友圈(微信怎么直接发表情包)

  • 手机root后怎么恢复(手机root后怎么还原)

    手机root后怎么恢复(手机root后怎么还原)

  • wps邮件合并在哪里(wps 邮件合并在哪)

    wps邮件合并在哪里(wps 邮件合并在哪)

  • 佳能mg2400清零方法(佳能mg2540清零)

    佳能mg2400清零方法(佳能mg2540清零)

  • 写字板是windows的一个什么程序(写字板是windows7的一个什么)

    写字板是windows的一个什么程序(写字板是windows7的一个什么)

  • 如何生成健康码(如何生成健康码的二维码)

    如何生成健康码(如何生成健康码的二维码)

  • 华为的畅连通话要钱吗(华为的畅连通话需要对方开通吗)

    华为的畅连通话要钱吗(华为的畅连通话需要对方开通吗)

  • 抖音怎么设置不看某个人的视频(抖音怎么设置不推荐通讯录好友)

    抖音怎么设置不看某个人的视频(抖音怎么设置不推荐通讯录好友)

  • 贴吧账号被系统封禁怎么办(贴吧账号被系统永久封禁能解封吗)

    贴吧账号被系统封禁怎么办(贴吧账号被系统永久封禁能解封吗)

  • steam微信支付加载不出来(steam微信支付流程)

    steam微信支付加载不出来(steam微信支付流程)

  • 苹果怎么不用id下载软件(苹果怎么不用id密码抹除所有)

    苹果怎么不用id下载软件(苹果怎么不用id密码抹除所有)

  • 青桔共享单车怎么下载(青桔共享单车怎么取消自动扣费)

    青桔共享单车怎么下载(青桔共享单车怎么取消自动扣费)

  • b站里ul怎么升级(b站ul等级怎么升级)

    b站里ul怎么升级(b站ul等级怎么升级)

  • 微信添加过的人有记录吗(微信添加过的人能查到吗)

    微信添加过的人有记录吗(微信添加过的人能查到吗)

  • 哈罗单车怎么远程扫码(哈罗单车怎么远距离帮别人扫车)

    哈罗单车怎么远程扫码(哈罗单车怎么远距离帮别人扫车)

  • 微信自动扣费怎么恢复(微信自动扣费怎么取消解约)

    微信自动扣费怎么恢复(微信自动扣费怎么取消解约)

  • 华为手机锁屏时间设置在哪里(华为手机锁屏时显示步数在哪里设置)

    华为手机锁屏时间设置在哪里(华为手机锁屏时显示步数在哪里设置)

  • 荣耀20pro有红外吗(荣耀80pro有红外功能吗)

    荣耀20pro有红外吗(荣耀80pro有红外功能吗)

  • mbr转gpt数据会丢失吗(mbr转gpt 数据)

    mbr转gpt数据会丢失吗(mbr转gpt 数据)

  • 微视保护模式怎么解除(微视保护模式怎么打开)

    微视保护模式怎么解除(微视保护模式怎么打开)

  • soc和cpu的区别(soc和ic的区别)

    soc和cpu的区别(soc和ic的区别)

  • iphone8要贴钢化膜吗(iphone8p需要贴钢化膜吗)

    iphone8要贴钢化膜吗(iphone8p需要贴钢化膜吗)

  • 苹果竖拍照为啥变横了(苹果竖拍照为啥变横拍)

    苹果竖拍照为啥变横了(苹果竖拍照为啥变横拍)

  • phpcms和dedecms有什么区别?(cms和php的关系)

    phpcms和dedecms有什么区别?(cms和php的关系)

  • 租金收入个税怎么交
  • 所得税资产和所得税费用
  • 申请退税到账后怎么处理
  • 所得税亏损年限有什么规定
  • 如何开小加工厂
  • 普通发票需要进项税额转出吗
  • 工会经费计税基数包含支付职工的辞退福利
  • 暂估入库必须次日入库吗
  • 外购货物对外捐赠企业所得税
  • 所得税汇算清缴退税会计分录怎么做
  • 银行手续费要纳进去吗
  • 工程成本哪些可以抵扣
  • 专票信息内容
  • 异地开票需要在当地交税吗
  • 辅导期纳税人预缴增值税
  • 财产清查中固定资产盘亏
  • 购买东西收据
  • 简易计税方法的适用范围
  • 增值税纳税申报实训心得体会
  • 金税三期上线后的税收征管问题
  • 餐饮费开专票
  • 商标公司转让给个人提供什么?
  • 业务招待住宿费发票可以抵扣进项税吗
  • 苹果怎么设置屏保和壁纸
  • 生产和提供的区别
  • 继续涉入资产会计处理
  • 行政单位捐赠收入需要上缴财政吗
  • 出售固定资产减免的税款账务处理
  • 如何用python制作人工智能
  • web2的核心理念
  • linux部署tomcat的war包
  • opencv1.0安装
  • netconf over ssh
  • 应付票据核算的内容
  • 金蝶会计报表公式
  • 完美ui
  • json转pojo
  • 一般纳税人和小规模纳税人怎么界定
  • 职工教育经费是从工资里扣吗
  • 季度缴纳企业所得税可以弥补亏损吗
  • 个人无需办理汇票业务
  • 税控系统技术维护费的申报抵扣方法
  • 当月红冲上月开具的增值税
  • 折价或溢价摊销属于借款费用
  • 现金折扣商业折扣的区别
  • 汇票和本票的区别是
  • 股权稀释违法吗
  • 新买固定资产怎么记账
  • 以前年度不合规发票如何调年报
  • 确认医院体检收费怎么办
  • 个人如何进行股票交易
  • 私企公转私出纳有责任吗
  • 处置固定资产损失的账务处理
  • windows性能监视器怎么用
  • 勒索病毒2021
  • 如何解决工作
  • win10的ghost
  • windows8怎么设置
  • win8怎么安装不了win10
  • Mac怎么查看WiFi使用量
  • linux系统如何进入终端
  • cocos2dx 2.2.2
  • 纸嫁衣6攻略全文图解
  • 基于nodejs的项目
  • jquery删除dom
  • shell命令读取文件并新增另一文件到指定行
  • python xml dom
  • vue stylus
  • Python安装包
  • javascript简单代码
  • jquery选择器写法
  • android view view
  • python运行flask
  • 利息收入通过什么科目核算
  • 税务编号是什么 个人
  • 怎么看有没有欠税
  • 印花税当期没有发生可以不用申报吗
  • 没有税费种认定信息是什么意思
  • 湖南耕地占用税标准
  • 广东省广州市国资委
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设