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

  • 小米12sultra怎么秒拍50张(小米12sultra怎么不卖了)

    小米12sultra怎么秒拍50张(小米12sultra怎么不卖了)

  • iphone13pro夜景模式怎么开(iphone13pro夜景模式30秒)

    iphone13pro夜景模式怎么开(iphone13pro夜景模式30秒)

  • 荣耀30pro的指纹灯可以关闭吗(荣耀30pro的指纹解锁一直亮的)

    荣耀30pro的指纹灯可以关闭吗(荣耀30pro的指纹解锁一直亮的)

  • 荣耀30pro+有DC调光的吗(荣耀30pro+dc调光设置在哪)

    荣耀30pro+有DC调光的吗(荣耀30pro+dc调光设置在哪)

  • iphone通知分组什么意思

    iphone通知分组什么意思

  • 安卓8.1和9.0的区别(安卓8.1.0和安卓9)

    安卓8.1和9.0的区别(安卓8.1.0和安卓9)

  • 淘宝自动交话费怎么取消(淘宝里面自动充值话费)

    淘宝自动交话费怎么取消(淘宝里面自动充值话费)

  • 秘乐开通会员能取消吗(秘乐多少会员)

    秘乐开通会员能取消吗(秘乐多少会员)

  • ios13.3耗电严重怎么解决(ios13.5耗电严重)

    ios13.3耗电严重怎么解决(ios13.5耗电严重)

  • 拼多多下架商品对店铺有影响吗(拼多多下架商品是怎么回事)

    拼多多下架商品对店铺有影响吗(拼多多下架商品是怎么回事)

  • 键盘有几个键按不出来(键盘有几个键按了没反应)

    键盘有几个键按不出来(键盘有几个键按了没反应)

  • 笔记本电脑长时间没用开不了机怎么办(笔记本电脑长时间不用怎么存放)

    笔记本电脑长时间没用开不了机怎么办(笔记本电脑长时间不用怎么存放)

  • word文档表格怎么调小(word文档表格怎么设置行高)

    word文档表格怎么调小(word文档表格怎么设置行高)

  • ipad太卡怎么清理(ipad有点慢怎么清理)

    ipad太卡怎么清理(ipad有点慢怎么清理)

  • 扫一扫连接此wlan用什么扫(扫一扫连接此wifi)

    扫一扫连接此wlan用什么扫(扫一扫连接此wifi)

  • 为什么拼多多会自己扣钱(为什么拼多多会自动下载)

    为什么拼多多会自己扣钱(为什么拼多多会自动下载)

  • 抖音如何关掉商品橱窗功能(抖音如何关掉商城功能)

    抖音如何关掉商品橱窗功能(抖音如何关掉商城功能)

  • 微信退群有提示吗(微信退群有提示吗知乎)

    微信退群有提示吗(微信退群有提示吗知乎)

  • 苹果x跟苹果11有什么区别(苹果11和苹果x)

    苹果x跟苹果11有什么区别(苹果11和苹果x)

  • word占位符怎么取消(word占位符怎么居中)

    word占位符怎么取消(word占位符怎么居中)

  • 微信视频接不了是怎么回事(华为p40pro微信视频接不了)

    微信视频接不了是怎么回事(华为p40pro微信视频接不了)

  • 华为6x声音小如何处理(华为6x声音小如何调大声)

    华为6x声音小如何处理(华为6x声音小如何调大声)

  • 【uniapp】上拉触底加载更多的两种方式,组件里面和页面里面 scroll-view组件和onReachBottom触底方法,以及部分安卓机型scroll-view很难触发问题,且可以固定表头(uniapp scroll-view 上下滑动)

    【uniapp】上拉触底加载更多的两种方式,组件里面和页面里面 scroll-view组件和onReachBottom触底方法,以及部分安卓机型scroll-view很难触发问题,且可以固定表头(uniapp scroll-view 上下滑动)

  • 资金账簿印花税怎么算
  • 增值税进项税会计处理
  • 进项税额和销项税额是什么
  • 董事会职权是否为强制规定
  • 水利建设基金一定要交吗
  • 代收水电费的账务处理
  • 小规模旅游业差额增值税税率
  • 免税店含增值税吗
  • 餐饮行业打折部门是什么
  • 法院案件受理费计算器
  • 公司一上来要签三年
  • 外贸企业出口退税出口明细申报表
  • 办企业房权证费用多少
  • 润滑油经销需要什么资质
  • 个人经济纠纷
  • 现金支付可以报销吗
  • 企业所得税如何计提会计分录
  • 利税总额含企业所得税吗
  • 营改增的重点是什么
  • 增值是什么意思解释
  • 什么情况下税务会查账
  • 报税报错了怎么办?
  • 教育培训机构涉税问题
  • 增值税发票的帐号怎么查
  • 上月暂估本月怎么冲销
  • 劳务工资要附什么合同
  • 审计费可以抵扣进项吗
  • 企业研发人员数量在哪里查
  • 什么是会计科目?为什么要设置会计科目?
  • 外购商品可以直接结转成本吗
  • 电脑搜狗输入法不见了怎么调出来
  • 关税从量计征有什么
  • php常用的设计模式在开发中的实例
  • php递归函数的例子
  • 公司缴纳的公积金什么时候到账
  • neoDVD.exe - neoDVD是什么进程 有什么用
  • 员工报销的费用
  • 无偿赠送增值税问题
  • 企业改制土地增值税政策
  • 前端启动项目命令
  • 哪些情况即使取消核酸
  • 未完待续百度百科
  • JavaScript数组(四):判断数组相等的4种方法
  • axios是干嘛的
  • 数据库arc文件
  • mysql redo log buffer
  • 季末资产总额怎么计算出来的
  • python动态数据类型
  • 融资租出的办公楼
  • 制造行业结转成本
  • mysql从一个库导入进另一个库
  • 国税申报流程怎么操作的
  • 固定资产处置净收入转入什么账户核算
  • 企业所得税A类年报怎么申报
  • 1000元的打印机双十一满减可以减150吗少
  • 交通运输服务包括程租
  • 单位外币卡账户的资金应从其单位的外汇账户转账存入
  • 工程外管核销报告范本
  • 医疗投资机构的定义
  • 退回的银行手续费做什么科目
  • 原始凭证填制要点在原始凭证上书写阿拉伯数字正确的有
  • mysql数据存在内存还是硬盘
  • linux vps 教程
  • redhat gui
  • linux远程登录命令ssh
  • mac os固件下载
  • 写出10个linux系统操作命令和用法
  • 微软宣布
  • 不需要远程传输的文件
  • 详细测试就是全部测试
  • TestOpenGL
  • div与span区别及用法
  • 简介英文
  • shell字符串操作命令
  • python怎么计数
  • js实现功能
  • 怎么用git上传项目
  • js编写一个标准的单例模式类
  • 中国税务报多少钱
  • 江西国家税务局电子税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设