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

  • RESET是什么按键

    RESET是什么按键

  • vivo NEX 3s的屏幕有多大(vivonex3s的屏幕)

    vivo NEX 3s的屏幕有多大(vivonex3s的屏幕)

  • iphone时间旁边的箭头是什么(iphone时间旁边的猫爪)

    iphone时间旁边的箭头是什么(iphone时间旁边的猫爪)

  • 选择多个连续文件快捷键(选择多个连续文本需要借助快捷键)

    选择多个连续文件快捷键(选择多个连续文本需要借助快捷键)

  • 定位精灵打开应用怎么老闪退(定位精灵打开应用闪退)

    定位精灵打开应用怎么老闪退(定位精灵打开应用闪退)

  • 腾讯会议私聊主持人可以看见吗(腾讯会议私聊主持人能看到记录吗)

    腾讯会议私聊主持人可以看见吗(腾讯会议私聊主持人能看到记录吗)

  • soul怎么通过手机号加好友(soul怎么手机号搜好友)

    soul怎么通过手机号加好友(soul怎么手机号搜好友)

  • 微信上显示你已添加了(微信上显示你已被网警监视)

    微信上显示你已添加了(微信上显示你已被网警监视)

  • 网络攻击的三种类型(网络攻击的三种逻辑阶段)

    网络攻击的三种类型(网络攻击的三种逻辑阶段)

  • 快手关注就是粉丝吗(快手关注就是粉丝怎么办)

    快手关注就是粉丝吗(快手关注就是粉丝怎么办)

  • nova7是双卡双待吗(nova7是双卡双待手机吗)

    nova7是双卡双待吗(nova7是双卡双待手机吗)

  • livelog是什么文件(live是什么文件啊)

    livelog是什么文件(live是什么文件啊)

  • 为什么新手机要充电12小时(为什么新手机要用到没电)

    为什么新手机要充电12小时(为什么新手机要用到没电)

  • 苹果11怎么设置相机(苹果11怎么设置动态壁纸)

    苹果11怎么设置相机(苹果11怎么设置动态壁纸)

  • 小爱同学触屏版可以安装软件吗(小爱同学触屏版怎么下载应用)

    小爱同学触屏版可以安装软件吗(小爱同学触屏版怎么下载应用)

  • 宽带红灯闪烁怎么回事(宽带红灯闪烁是什么意思)

    宽带红灯闪烁怎么回事(宽带红灯闪烁是什么意思)

  • 手机网络lte是什么意思啊(手机网络 lte)

    手机网络lte是什么意思啊(手机网络 lte)

  • 咪咕盒子101连接wifi(咪咕盒子连网)

    咪咕盒子101连接wifi(咪咕盒子连网)

  • 微信怎么解封限制功能(微信怎么解封限制聊天功能)

    微信怎么解封限制功能(微信怎么解封限制聊天功能)

  • 设置别人打我电话关机(设置别人打我电话怎么办)

    设置别人打我电话关机(设置别人打我电话怎么办)

  • 小米手环4可以设置密码吗(小米手环4可以连接小米运动健康吗)

    小米手环4可以设置密码吗(小米手环4可以连接小米运动健康吗)

  • 苏宁如何修改绑定手机(苏宁怎么换绑身份证)

    苏宁如何修改绑定手机(苏宁怎么换绑身份证)

  • 32位升级64位系统教程

    32位升级64位系统教程

  • 微信小程序详细登录流程(图解+代码流程)(微信小程序详细教程)

    微信小程序详细登录流程(图解+代码流程)(微信小程序详细教程)

  • 小规模印花税可以零申报吗
  • 企业股权无偿转让不缴增值税
  • 公司车辆承包给个人违法吗
  • 投资收益做什么
  • 发票不在业务发生地
  • 销售报废车辆按多少计提销项税额
  • 低价销售差额部分计入
  • 先收入后开票如何做账
  • 货样广告品出口需要开票吗
  • 购买银行承兑利息收入是否缴纳增值税?
  • 合同印花税进哪个科目
  • 企业所得税季报弥补以前年度亏损怎么填
  • 水泥厂水泥增值税率是多少?
  • 2020年外资企业
  • 承包学校的食堂如何纳税
  • 开户存入现金计什么科目
  • 集体福利是否可以抵税
  • 贷款呆账处理了多长时间恢复征信
  • 12月的发票可以1月付款吗
  • 货币性项目和非货币性项目的区别是什么?如何进行处理?
  • 购进货物无偿赠送其他单位
  • mac怎么打印文件内容
  • 网络平台的收入怎么算
  • 商标注册费用
  • php上传大文件失败
  • 预收账款何时结转
  • win11企业版激活
  • 超市代金券买什么最划算
  • PHP:apache_get_modules()的用法_Apache函数
  • 存货包括其他业务成本吗
  • /locate village村庄
  • 经营性存款人违反规定
  • h5页面跳转小程序不显示按钮
  • mysql_escape_string()函数用法分析
  • 观察者模式java实现
  • Http协议之Content-Type理解
  • react中路由有哪些常用组件
  • vue 路由
  • 分公司需要交所得税吗
  • kafka gui
  • 小规模开劳务费可以开多少
  • 递归是从底向上逐层计算的
  • mongodb数据表设计怎么写
  • 免税公司专用发票是什么
  • 房产税一般在哪缴纳
  • 个人所得税表格怎么做
  • 弥补亏损的会计科目有哪些
  • 评估价值高于账面价值怎么账务处理
  • 个体工商户不缴纳印花税吗
  • 贴现法付息实际利率
  • 其他未列明信息技术服务业
  • 高新技术企业政府补助要交所得税吗
  • 苗木税票怎么抵扣
  • 股权变更需要做账吗
  • 股东是否实缴出资的举证责任
  • 房地产行业的特殊性表现在哪些方面
  • 购买方退货的会计分录怎么写
  • 水电费收据可以写一张上吗
  • 成品油 规定
  • 银行固定资产有哪些
  • unix含义
  • windows模拟
  • win10怎么查看windows版本
  • 更换主板也不用换硅脂吗
  • win8.1屏幕键盘
  • linux病毒排查
  • 逐一介绍班子成员表现
  • Unity3D游戏开发培训课程大纲
  • 详解16型人格
  • jquery 表单
  • cocos引擎教程
  • 社保ukey怎么使用
  • 征管法第六十九条
  • 购买的土地没有土地使用证
  • 税收分类分级管理后如何开展风险管理
  • 加强税务工作
  • 306医院改名什么了
  • 小规模纳税人在电子税务局怎么报税
  • 国税局发票查询平台发票查询
  • 金水区地税局办事大厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设