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

  • 红米k50至尊版怎么插卡(红米k50至尊版怎么开小窗口)

    红米k50至尊版怎么插卡(红米k50至尊版怎么开小窗口)

  • 华为双系统模式怎么开

    华为双系统模式怎么开

  • 腾讯会议怎么关闭别人的声音(腾讯会议怎么关闭麦克风)

    腾讯会议怎么关闭别人的声音(腾讯会议怎么关闭麦克风)

  • 手机丢了如何定位(手机丢了如何定位手机号所在位置)

    手机丢了如何定位(手机丢了如何定位手机号所在位置)

  • OPPO Ace2支持防抖的吗(oppoace2支持防抖吗)

    OPPO Ace2支持防抖的吗(oppoace2支持防抖吗)

  • 华为手机白色圆点怎么关掉(华为手机白色圆圈有什么用)

    华为手机白色圆点怎么关掉(华为手机白色圆圈有什么用)

  • iphonex三维触控没反应(iphone xs 三维触控开与不开区别)

    iphonex三维触控没反应(iphone xs 三维触控开与不开区别)

  • 拼多多怎么删除拼小圈里面的好友(拼多多怎么删除订单记录)

    拼多多怎么删除拼小圈里面的好友(拼多多怎么删除订单记录)

  • 返回上一级快捷键(如何返回上一级)

    返回上一级快捷键(如何返回上一级)

  • 拼多多聚宝盆在哪里打开(拼多多里聚宝盆)

    拼多多聚宝盆在哪里打开(拼多多里聚宝盆)

  • 电压ac和dc是什么意思(电压acv和dcv)

    电压ac和dc是什么意思(电压acv和dcv)

  • 华为siri怎么打开(华为的siri怎么召唤出)

    华为siri怎么打开(华为的siri怎么召唤出)

  • 华为充满电怎么还有闪电标志(华为充电充满)

    华为充满电怎么还有闪电标志(华为充电充满)

  • 企鹅电竞为什么黑屏(企鹅电竞为什么会停运)

    企鹅电竞为什么黑屏(企鹅电竞为什么会停运)

  • 小爱同学在哪个手机上有(小爱同学在哪个手机)

    小爱同学在哪个手机上有(小爱同学在哪个手机)

  • 小米cc9发布时间(小米cc9发布时间是多少)

    小米cc9发布时间(小米cc9发布时间是多少)

  • 华为手机是不是有两个系统(华为手机是不是有两个空间)

    华为手机是不是有两个系统(华为手机是不是有两个空间)

  • 苹果11删除的照片在哪里(苹果11删除的照片怎么找)

    苹果11删除的照片在哪里(苹果11删除的照片怎么找)

  • artal00x是华为什么型号

    artal00x是华为什么型号

  • 苹果手机能给mp3下歌吗(苹果手机能给mp3传歌吗)

    苹果手机能给mp3下歌吗(苹果手机能给mp3传歌吗)

  • 苹果max怎么反向充电(苹果max怎么反向充电模式)

    苹果max怎么反向充电(苹果max怎么反向充电模式)

  • vivoz3手机返回键在哪里设置(vivoz3手机返回键在哪里)

    vivoz3手机返回键在哪里设置(vivoz3手机返回键在哪里)

  • qq注销账号怎么注销(qq注销账号怎么注销不了)

    qq注销账号怎么注销(qq注销账号怎么注销不了)

  • 华为快手不带美颜咋办(华为手机里的快手没有功能)

    华为快手不带美颜咋办(华为手机里的快手没有功能)

  • 如何把拉黑的电话解除(如何把拉黑的电话找回来)

    如何把拉黑的电话解除(如何把拉黑的电话找回来)

  • 在win7中,本地连接无法禁止或开启该怎么解决?(win7的本地连接在哪)

    在win7中,本地连接无法禁止或开启该怎么解决?(win7的本地连接在哪)

  • 捐赠劳务支出可在企业所得税前扣除吗
  • 会计核算程序的含义
  • 无形资产摊销完后有余额吗
  • 自然人独资企业股东承担连带责任
  • 开票超过定额怎么办
  • 销售折让开具红字
  • 退回的税款如何做账
  • 住房公积金个人和单位各承担多少
  • 集资建房出租收入如何缴纳个税
  • 公户可以在淘宝下单吗
  • 集团股份怎么分配
  • 所得税审核费计入什么科目
  • 外购电力费用分配例题
  • 购物开了增值税怎么退
  • 本年度应收账款是否应该加起初
  • 公司企业变更后原来的营业执照还有吗
  • 坏账损失计入什么费用
  • 冲减增值税销项税额
  • 收到的劳务费发票进什么科目
  • 其他应付款不需要支付是债务重组么
  • 取得的国债利息收入可以抵扣吗
  • 小规模企业低值易耗品摊销方法
  • 接受国外企业捐款的条件
  • 默认网关不可用修复后过一会又不好使了
  • linux的sed命令
  • 怎么获得最新医学类指南
  • 两处发工资,如何合并
  • 进口货物可以退回吗
  • win10我无法更改某些设置
  • 个税返还会计政策
  • 个人销售非住宅无法提供原值怎么计算增值税
  • 应纳所得税额税率表
  • 建筑劳务公司何去何从
  • 预缴季度企业所得税分录
  • 筹建期间借款费用
  • Video Transformer | TimeSformer 理解+ 代码实战
  • 谷歌浏览器跨域解决方案
  • linux rm 命令
  • for of 与for in
  • 建筑工程价款结算
  • 增值税普通发票查询真伪
  • 织梦cms要钱吗
  • sql cell函数
  • db2 history
  • 招标押金有规定吗
  • 增值税专用发票查询系统官方网站
  • 文化事业建设税怎么申报
  • 对公贷款利息如何入账
  • 工商年报认缴时间过期了怎么办
  • 企业应如何合理安排筹资期限的组合方式,优化资金结构
  • 电脑配件入账
  • 记账凭证后面附发票第几联
  • 工程项目增值税预缴税率
  • 收到工会经费怎么指定现金流入
  • 收到进项税发票
  • 收款单属于什么科目
  • 废料入库如何估价
  • 本期盈余为负数怎么调整
  • 财务报表分析的主体是
  • 机器配件属于什么类型的商品
  • 营业税金及附加会计分录
  • Linux下mysql 5.6.17安装图文教程详细版
  • java如何连接sql
  • solaris syslog
  • win8的系统怎么装win7
  • win10raw预览
  • win10累积更新 卡住
  • 一键ghostcgi
  • 桌面任务栏消失怎么办
  • cocos2dx 不规则按钮的实现
  • jQuery实现ToolTip元素定位显示功能示例
  • 深入理解两个大计重要论断心得体会
  • js实现@功能
  • 用python编写
  • python 基础 详细
  • javascript用处
  • js获取文本框的值进行计算
  • 什么叫发票信息对比
  • 郑州房产交契税在哪里交
  • 电子专票在哪里接收
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设