位置: IT常识 - 正文

ES6的Promise详解(es6 promise await)

编辑:rootadmin
ES6的Promise详解 文章目录前言一、Promise的概念二、使用Promise创建 PromisePromise 常用方法Promise.prototype.then()Promise.prototype.catch()all()链式调用前言

推荐整理分享ES6的Promise详解(es6 promise await),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:es6 promise then,es6 promise使用场景,es6的promise有几种状态,es6 promise.all,es6的promise有几种状态,es6的promise有几种状态,es6 promise.all,es6 promise then,内容如对您有帮助,希望把文章链接给更多的朋友!

本篇文章主要介绍了ES6语法中的Promise对象的使用详解,promise对象是JS进阶学习中的重要知识点, 如果本文对你有所帮助请三连支持博主,你的支持是我更新的动力,先赞后看养成习惯。

以下是本篇文章正文内容

一、Promise的概念

Promise是异步编程的一种解决方案,是一个对象,可以获取异步操作的消息,大大改善了异步编程的困难,避免了回调地狱,比传统的解决方案回调函数和事件更合理和更强大。

所谓 Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

ES6 开始支持 Promise Promise 对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简而言之,就是处理异步请求的。之所以叫做 Promise,就是承诺做这件事,如果成功则怎么处理,失败则怎么处理。

Promise 首先是一个对象 (是一个对象!!!!),它通常用于描述现在开始执行,一段时间后才能获得结果的行为(异步行为),内部保存了该异步行为的结果。然后,它还是一个有状态的对象:

pending:待定fulfilled:兑现,有时候也叫解决(resolved)rejected:拒绝ES6的Promise详解(es6 promise await)

一个 Promise 只有这 3 种状态,且状态的转换过程有且仅有 2 种:

pending 到 fulfilled (resolved)pending 到 rejected二、使用Promise创建 Promise

调用 Promise 构造函数来创建一个 Promise。

let promise = new Promise((resolve, reject) => {// 要做的事情...});

Promise 构造函数接收一个函数作为参数,该函数的两个参数是 resolve,reject,它们由 JavaScript 引擎提供。

resolve 函数的作用是,将 Promise 对象的状态从“未完成”变为“成功”(即从pending 变为resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject 函数的作用是,将 Promise 对象的状态从“未完成”变为“失败”(即从pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

Promise 常用方法Promise.prototype.then()

then 方法可以接收两个回调函数作为参数,第一个回调函数是Promise对象的状态改变为 resoved 是调用,第二个回调函数是 Promise 对象的状态变为 rejected 时调用。其中第二个参数可以省略。

promise.then((resoved)=>{console.log('成功')},(rejected)=>{console.log('失败')})Promise.prototype.catch()

该方法相当于 then 方法的第二个参数,指向 reject 的回调函数。 另一个作用是在执行resolve回调函数时,如果出错,抛出异常,不会停止运行,而是进入catch 方法中。

catch 只接受一个参数,也就是 rejected 抛出的值,一般用于异常处理。传统的try/catch捕获不了Promise内部的异常的,因为抛出异常这个动作是异步的。在处理异常的时候,我们可以在catch中进行异常的捕获,也可以直接抛出异常。

p.then((data) => { console.log('resolved',data);},(err) => { console.log('rejected',err); }); p.then((data) => { console.log('resolved',data);}).catch((err) => { console.log('rejected',err);});all()

Promise 的 all 方法提供了并行执行异步操作的能力,在 all 中所有异步操作结束后才执行回调。

function p1() { var promise1 = new Promise(function (resolve, reject) { console.log("p1的第一条输出语句"); resolve("p1完成"); }); return promise1;}function p2() { var promise2 = new Promise(function (resolve, reject) { console.log("p2的第一条输出语句"); setTimeout(() => { console.log("p2的第二条输出语句"); resolve("p2完成"); }, 2000); }); return promise2;}function p3() { var promise3 = new Promise(function (resolve, reject) { console.log("p3的第一条输出语句"); resolve("p3完成"); }); return promise3;}Promise.all([p1(), p2(), p3()]).then(function (data) { console.log(data);});

输出结果:

p1的第一条输出语句;p2的第一条输出语句;p3的第一条输出语句;p2的第二条输出语句[("p1完成", "p2完成", "p3完成")];链式调用

链式调用的过程中 then() 方法或 catch() 方法的回调的返回值会作为下一个 then() 方法的回调的参数,无返回值也可继续 .then(),如果没有错误,catch 方法将发生穿透。

new Promise((resolve, reject) => { resolve('请求成功了'); }) .then((value) => { console.log(value); return new Error('错误'); }) .catch(() => { console.log('错误'); //未打印,发生穿透 }) .then((value) => { console.log(111); }) .then((value) => { console.log(222); })

本文链接地址:https://www.jiuchutong.com/zhishi/296129.html 转载请保留说明!

上一篇:React 框架(react框架和vue哪个用的人多)

下一篇:波尔图,葡萄牙 (© Kanuman/Shutterstock)(波尔图葡萄牙语)

  • 微信美颜功能怎么设置vivo(微信美颜功能怎么设置免费)

    微信美颜功能怎么设置vivo(微信美颜功能怎么设置免费)

  • 小米6可以换内存吗(小米6可以换内存大一点的)

    小米6可以换内存吗(小米6可以换内存大一点的)

  • 表格一个格子怎么打两行字(表格一个格子怎么排序)

    表格一个格子怎么打两行字(表格一个格子怎么排序)

  • 为什么酷狗铃声设置了视频铃声还是不能用(为什么酷狗铃声设置不了闹铃)

    为什么酷狗铃声设置了视频铃声还是不能用(为什么酷狗铃声设置不了闹铃)

  • wifi信号强度标准dbm(wi-fi信号强度)

    wifi信号强度标准dbm(wi-fi信号强度)

  • 如何解除淘宝限制下单(如何解除淘宝限额)

    如何解除淘宝限制下单(如何解除淘宝限额)

  • 0x00000116蓝屏的原因(0x00000116蓝屏解决)

    0x00000116蓝屏的原因(0x00000116蓝屏解决)

  • 微信关注过的公众号怎么找(微信关注过的公众号有记录么)

    微信关注过的公众号怎么找(微信关注过的公众号有记录么)

  • 拉黑还有没有聊天记录(拉黑了还有聊天记录嘛)

    拉黑还有没有聊天记录(拉黑了还有聊天记录嘛)

  • 模拟摄像头和同轴摄像头的区别(模拟摄像头和同轴摄像头可以通用吗)

    模拟摄像头和同轴摄像头的区别(模拟摄像头和同轴摄像头可以通用吗)

  • 怎么把光盘里的视频弄到手机里(怎么把光盘里的东西拷贝到u盘里)

    怎么把光盘里的视频弄到手机里(怎么把光盘里的东西拷贝到u盘里)

  • 怎么p30pro拍照那么模糊(p30pro p30拍照)

    怎么p30pro拍照那么模糊(p30pro p30拍照)

  • 微信实名认证不是本人怎么解除(微信实名认证不绑定银行卡可以收钱吗)

    微信实名认证不是本人怎么解除(微信实名认证不绑定银行卡可以收钱吗)

  • 天猫精灵支持四川话吗(天猫精灵能连上4g无线数据么)

    天猫精灵支持四川话吗(天猫精灵能连上4g无线数据么)

  • 微信笔记怎么重新编辑(微信笔记怎么重命名发送)

    微信笔记怎么重新编辑(微信笔记怎么重命名发送)

  • 苹果11手电筒在哪里关闭(苹果11手电筒在哪里设置)

    苹果11手电筒在哪里关闭(苹果11手电筒在哪里设置)

  • obb文件怎么安装(obb文件如何安装)

    obb文件怎么安装(obb文件如何安装)

  • 红米k20pro尊享版什么时候更新miui11(红米k20pro尊享版上市价格)

    红米k20pro尊享版什么时候更新miui11(红米k20pro尊享版上市价格)

  • pr给视频添加特效(pr给视频添加特效的方法有哪些)

    pr给视频添加特效(pr给视频添加特效的方法有哪些)

  • 华为p20自带红外线吗(p20有红外)

    华为p20自带红外线吗(p20有红外)

  • p30如何关机(p30手机如何关机)

    p30如何关机(p30手机如何关机)

  • 优酷错误代码(优酷错误代码1000-95)

    优酷错误代码(优酷错误代码1000-95)

  • __dict__在python中的实例操作(dict在python中的作用)

    __dict__在python中的实例操作(dict在python中的作用)

  • 没有达到30万销量怎么办
  • 印花税的征税对象是条例列举的凭证未列举的不征税
  • 营业税是什么意思 视频
  • 消费税退回退税流程
  • 记账王怎么查询凭证
  • 一般纳税人的发票抵扣进项税额
  • 销售商品收到的银行本票
  • 上季度所得税申报怎么填
  • 小规模建筑业如何做账
  • 防伪税控业务
  • 应交税费核算的税金有哪些
  • 外购材料费用可能计入
  • 税控盘抵减增值税需要结转吗
  • 海关进口关税专用缴款书可以抵扣增值税吗
  • 发给一个人的说说
  • 房租发票按季度开具,可以一次性计费用吗
  • 小规模纳税人申报纳税详细流程
  • 公司开出的发票
  • 公司以银行存款名义为员工垫付医疗费分录怎么写
  • 子公司注销投资收益是否纳税合并层面
  • 增值税进项抵扣期限及认证期限
  • 非直系亲属继承房产后再卖掉后交税吗
  • 民办非企业缴纳失业保险吗
  • 建设单位对工程施工的评价意见
  • 2018增值税暂行条例
  • win11重置此电脑失败
  • 固定资产减值准备影响折旧吗
  • vscode国内镜像
  • php模板引擎语法
  • RPDFLchr.exe - RPDFLchr是什么进程 有什么用
  • 资产负债表怎么算资产负债率
  • django ajax 分页
  • 无形资产的摊销年限不得低于多少年
  • php机试题
  • 当月进项税额转出当月申报吗
  • 印花税的优惠政策和依据
  • 普通发票和增值税发票都能报销吗
  • 财务人离职了怎么说
  • 大前端2021
  • 存货采购成本有余额吗
  • 公允价值变动损益借贷方向
  • 销售旧货和销售使用过的物品税率
  • 固定资产的认定标准2000元
  • 财务报表中的应收款项包括哪些
  • 时区时间对照表
  • 抚恤金发放标准2019年
  • 多计提的个税能退回给员工吗
  • 股权变更后税务登记
  • 公司固定资产抵押贷款无法偿还
  • 金税四期主要监控的内容
  • 总分类账的登记依据和方法取决于企业所采用的
  • 建筑行业工程施工当月可以不结转吗
  • 民办幼儿园的经费投入
  • 考核员工的罚款计入什么
  • 车辆使用费包括油费吗
  • 工程行业收到工程发票
  • sql语句排除重复数据
  • 在mysql中使用视图的限制不包括
  • win7 64位运行软件提示MSCOMCTL.OCX丢失或无效该怎么办?
  • tcpsyncookies
  • win10怎么关闭防火系统
  • linux 删除文件夹里的所有文件
  • windows关闭安全引导
  • linux的总结
  • windowsxp复制粘贴不可用?
  • linux ll不能用
  • centos7 ifcfg-lo
  • win7系统宽带连接错误651
  • linux用户添加
  • win7注册表修改锁屏时间
  • js 数组取值
  • js对象属性值
  • jquery插件是干什么的
  • linux 每隔几秒执行一次
  • css中渐变
  • java获取两个日期间的所有月份
  • javascript简明教程
  • javascript基础教学
  • 本期实际抵扣税金怎么算
  • 国际贸易争端的形式
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设