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

  • 华为的语音助手怎么呼唤(华为的语音助手怎么唤醒)

    华为的语音助手怎么呼唤(华为的语音助手怎么唤醒)

  • 小米10至尊纪念版跑分是多少(小米10至尊纪念版换电池)

    小米10至尊纪念版跑分是多少(小米10至尊纪念版换电池)

  • 物联网的含义是什么(物联网的含义是什么意思,写写你对互联网的认识)

    物联网的含义是什么(物联网的含义是什么意思,写写你对互联网的认识)

  • 华为5.5寸手机有哪些(华为手机5.5英寸手机有哪些)

    华为5.5寸手机有哪些(华为手机5.5英寸手机有哪些)

  • 固态硬盘读取速度和写入速度(固态硬盘读取速度3500够用吗)

    固态硬盘读取速度和写入速度(固态硬盘读取速度3500够用吗)

  • 蓝光碟和dvd的区别(蓝光碟和dvd的区别在哪)

    蓝光碟和dvd的区别(蓝光碟和dvd的区别在哪)

  • 为什么苹果手机蓝牙开了没有显示(为什么苹果手机会发烫)

    为什么苹果手机蓝牙开了没有显示(为什么苹果手机会发烫)

  • 快手店铺订单为什么什么都看不到(快手里小店订单怎么什么都不显示了)

    快手店铺订单为什么什么都看不到(快手里小店订单怎么什么都不显示了)

  • 现在手机换电池对手机有影响吗(现在手机换电池简单吗)

    现在手机换电池对手机有影响吗(现在手机换电池简单吗)

  • 钉钉截屏会被发现吗(钉钉截图会被公司监控吗)

    钉钉截屏会被发现吗(钉钉截图会被公司监控吗)

  • 华为nova2plus是什么时候上市的(华为nova2plus是什么意思)

    华为nova2plus是什么时候上市的(华为nova2plus是什么意思)

  • qq空间被挡访客怎么解除(qq空间被挡访客为什么被挡)

    qq空间被挡访客怎么解除(qq空间被挡访客为什么被挡)

  • 苹果返厂维修需要发票吗(苹果返厂维修需要收费吗)

    苹果返厂维修需要发票吗(苹果返厂维修需要收费吗)

  • word2010添加稿纸设置(word加入稿纸)

    word2010添加稿纸设置(word加入稿纸)

  • 苹果手表充满电自动断电吗(苹果手表充满电手机提示)

    苹果手表充满电自动断电吗(苹果手表充满电手机提示)

  • 公司oa系统怎么安装(oa系统如何操作)

    公司oa系统怎么安装(oa系统如何操作)

  • led滚动电子屏设置(led显示屏怎么设置滚动字幕)

    led滚动电子屏设置(led显示屏怎么设置滚动字幕)

  • 荣耀magic2防水吗(荣耀magic2进水了怎么办)

    荣耀magic2防水吗(荣耀magic2进水了怎么办)

  • vivoz3和y97的区别(vivo z3和y97哪个好)

    vivoz3和y97的区别(vivo z3和y97哪个好)

  • hp台式机win10改win7(hp台式机怎么改win7)

    hp台式机win10改win7(hp台式机怎么改win7)

  • api通俗解释(api通俗理解)

    api通俗解释(api通俗理解)

  • 强制锁定4g信号(锁定4g网络)

    强制锁定4g信号(锁定4g网络)

  • 鸿蒙系统可以进行补电吗?鸿蒙系统补电教程(鸿蒙系统进入工程菜单)

    鸿蒙系统可以进行补电吗?鸿蒙系统补电教程(鸿蒙系统进入工程菜单)

  • 玄学错误:RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED 解决方案——cuDNN 卸载并重装(玄学2021)

    玄学错误:RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED 解决方案——cuDNN 卸载并重装(玄学2021)

  • 汇算清缴补交所得税会计分录小企业会计政策
  • 长期待摊费用对方科目
  • 建筑企业印花税的计税依据
  • 装修行业专票的税率是多少
  • 差额发票能不能报销
  • 苗木属于农产品中哪一类
  • 残疾人一次性奖金
  • 土地使用权出让金多少钱一平米
  • 搬运费计入
  • 装修公司能开增值发票吗
  • 固定资产报废税费怎么处理
  • 固定资产原值是含税还是不含税
  • 该期已经申报此税种且数据已提交,不能预约扣款
  • 外购物品用于计提折旧吗
  • 建筑企业异地预缴增值税流程
  • 关于诉讼费减半如何减的问题
  • 如何查看windows10
  • 多计提的房产税怎么做分录
  • sinutrain破解版
  • window11如何打开任务管理器
  • win11怎么关闭打开软件的弹窗
  • php 静态
  • 建筑业成本核算表格百度网盘
  • php ftp上传文件
  • php b/s
  • windows11自带录屏怎么使用
  • php sql语句
  • 低值易耗品摊销方法名称怎么选
  • 公允价值变动损益借贷方向增减
  • php数组数据结构
  • 游戏ai模式是什么意思
  • uniapp下拉
  • 伪类的常见类型
  • php微信公众号开发反回图片怎么弄的学校
  • 增值税附加税有什么
  • 公司现金发放证明
  • 对公账号里面的钱会扣税吗
  • 公司出售房子怎么交税
  • 开票品名不一样有什么关系
  • 在dedecms中,如何模板建站
  • 免税公司专用发票是什么
  • sql server 实现数据值加一减一
  • mysql数据库连接方式
  • 纸质专票红冲
  • 普通发票忘记开数量和单价可以用吗?
  • 房租收入如何缴纳增值税
  • 挂靠管理费如何入账?
  • 公司厨房用具
  • 劳务派遣公司收入确认税收政策
  • 现金往来款怎么做账
  • 旅游业小规模纳税人增值税申报
  • 勾选通行费发票后如何做分录
  • 银行扣掉的手续费怎么算
  • 可持续增长率和内部增长率的区别
  • centos 中文
  • 富士通FUJITSU笔记本电脑开机进入BIOS的方法(F2)
  • ubuntu20.04怎么用
  • skyleap用不了
  • xp系统怎么安装网络驱动
  • win10如何动态桌面
  • win10关闭defender方法
  • win7系统怎么查看隐藏文件夹
  • cocos creator js ts
  • BootStrap glyphicons 字体图标实现方法
  • shell脚本语言入门
  • python 进程间通讯
  • unity3d地图定位
  • 常用标准化布局标签有哪些?
  • android 蓝牙 驱动 适配 sdio rk
  • 用一个简单的方法作文
  • 也论主板的扩展性
  • fragment中嵌套fragment
  • js 进阶
  • JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
  • javascript常用语句
  • 税务总局电子申报软件39
  • 办图书馆怎么审批
  • 珠宝消费税怎么申报
  • 山西省地方税务局通用定额发票
  • 地税局的全称是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设