位置: 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)(波尔图葡萄牙语)

  • 分公司注销需要总公司法人实名确认吗
  • 装卸搬运的设备有哪些类型
  • 制造业的税率是多少啊
  • 每月记账报税客户怎么填
  • 过路费按照什么缴纳增值税
  • 企业所得税可以税前扣除的税有哪些
  • 小规模纳税检查怎么做
  • 折扣销售的增值税处理方式
  • 收到未税货款怎么入账
  • 工程款的税是怎么扣除的?
  • 什么费用需要进行摊销
  • 企业注销未分配利润要交个人所得税吗
  • 出口的进项发票如何记账
  • 公司向员工借款合法吗
  • 房产税税计入什么科目
  • 车辆租赁的增值税率
  • 小规模纳税人3%减按1%的账务处理
  • 失控包括
  • 破产清算重整和解
  • 打印企业银行流水需要密码吗
  • 企业固定资产折旧费计入什么成本
  • 增值税季度不超过30万
  • 去国外参加展会带什么东西
  • win11任务栏如何设置在最左边
  • 招待费的住宿费可以抵扣吗
  • 如何删除鸿蒙
  • 收到客户付款 会计分录
  • php数组有哪几种类型
  • 接待客人后的感受和过程
  • 企业为职工代扣代缴的个人所得税计入什么科目
  • 领料单出库单区别
  • 当月计算的增值税怎么算
  • vue项目中技巧知识点
  • 偿还应付账款会使得资产报酬率增加吗
  • 2021年前端面试
  • php实现四种基础方式
  • 劳务派遣怎么开
  • 房地产销售折扣
  • 大陆工作的香港人可以开基金账户吗
  • {dede:channel type='son'}无栏目调用同级栏目
  • 建筑业预缴增值税计算公式
  • 征地拆迁的费用可以作为资产吗
  • SQL SERVER使用的是( )逻辑模型
  • mysql密码忘了咋办
  • 退货给谁
  • 专项应付款和政府补助的区别
  • 营业外支出在贷方
  • 估价入库的会计分录
  • 企业缴纳员工社保会计分录
  • 发票冲红原件需要拿回来吗
  • 固定资产的后续计量
  • 出口货物不予免税的原因
  • 支付贷款利息属于筹资活动吗
  • 房地产开发企业增值税税率
  • 多种不同的 MySQL 的 SSL 配置
  • sqlserver连接到服务器
  • solaris date命令
  • 轻松玩转职场职场沟通与写作技巧答案
  • winxp系统如何调整屏幕亮度
  • 2021年win10累积更新
  • win7旗舰版如何进入bios
  • win10升级版本后还要激活吗
  • jquery验证
  • shell脚本-lt
  • li的简单应用
  • Unity3D游戏开发(第2版)pdf
  • css控制文字换行
  • nodejs入门教程
  • 修改bash_profile
  • android 按键
  • unity引擎叫什么
  • 深入理解javascript特性
  • 总公司与分公司的法律责任
  • 云南税务局网上办税大厅登录入口官网
  • 定额发票属于什么类型
  • 辽宁国家税务局公务员职位2023
  • 仓储物流用地属于商业用地吗
  • 进口完税价格包括哪些部分
  • 辽宁地方税务局招聘
  • 国家税收返还政策有哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设