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

  • 调整税率后增值税发票的开具
  • 孳息和利息的区别
  • 以前年度损益调整在利润表中怎么填
  • 企业购车发票怎么查询
  • 资金收益率计应收账款吗
  • 车险退到对公账户会计分录是
  • 股东投入资金大,但不想成为法人
  • 定额中税金包含什么
  • 税收和税法是什么关系
  • 赠送固定资产会计处理
  • 在建投资性物业管理办法
  • 个人怎么捐赠物资
  • 事业单位收到借款分录
  • 公司年底奖金怎么算
  • 利息及债券溢价摊销表
  • 支付宝转账到银行卡多久到账
  • 企业取暖费怎么做会计分录
  • 刻章的发票怎么做分录
  • 报税申报不了
  • 个税没有扣除项,需要填写和确认吗
  • 财务内账外账的优缺点
  • 收到管理费用的会计科目
  • 年增收节支总额与新增利税的关系
  • 租车公司的车能租吗
  • 劳务所得个税税率表
  • 公司变更名称重新申请
  • 应收账款零头没有收到如何账务处理
  • 用积分兑换礼品英语怎么说
  • 行政事业单位临聘人员
  • phpfread
  • 支付境外培训费要交税吗
  • 外资企业注册资本认缴制期限
  • php中session和cookie
  • 长期借款利息调整会计分录
  • sysctl命令配置主机名
  • 劳务费发票 个税
  • 员工工资计提
  • wordpress建立数据库失败
  • 坏账准备计入科目
  • 企业所得税计提金额怎么算
  • 外购商品发放给员工 进项税额能不能抵扣
  • 品种法的特点有( )
  • 汇算清缴要退税1750元,不想退要调平怎么调?
  • 给客户减免的货款怎么做账
  • 银行交党费属于什么业务
  • 暂估商品会计分录
  • 购买不良债权如何追偿
  • 农业生产成本核算方法
  • 营销活动开什么发票
  • 建筑工程公司收入来源
  • 保险可以税前扣除吗
  • 注销基本户必须注销专户吗
  • 新医院会计制度什么时候实施
  • 建立明细账科目怎么排顺序
  • sql中出现将截断字符串或二进制
  • navicat 导入
  • win7系统中怎么卸载安装的软件
  • win7 64位系统如何查看计算机名称为了应付某一操作
  • centos环境搭建
  • 装双win7系统怎么设置
  • xp桌面字体有阴影怎么去掉
  • windows7日文版改中文
  • win7安装kb4534310补丁失败
  • linux记录操作记录
  • win10预览版和正式版区别
  • win7电脑关机出现0xc0000142是什么原因
  • node.js axios
  • python如何用turtle
  • 狗刨好学吗
  • css如何实现
  • js 字符编码
  • unity3d spine
  • python文本怎么运行
  • python怎么多进程
  • android源码下载地址
  • 基本农田建设的土地
  • 每月公积金900元交多少
  • 税务局风险管理股工作总结
  • 四川4050社保补贴政策什么时候发放
  • 淮安市地税局电话号码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设