位置: 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%
  • 房产税和土地使用税计入什么科目
  • 为什么中国没有工业革命
  • 劳务派遣企业如何认定
  • 进口车辆购置税公式
  • 啥叫规上工业企业
  • 公司自己的食堂需要办理食品经营许可证吗
  • 未达起征点销售额怎么填申报表
  • 基金预算收入核算的内容包括
  • 托收承付结算的付款期均为三天
  • win10文件用什么打开
  • 最新的会计规定出台时间
  • 如何用腾讯电脑管家删除文件
  • php字符串操作函数
  • php数组函数,选班长
  • 偷税漏税如何处罚
  • 木星应该涂什么颜色
  • 冷漠的渡鸦们,美国阿拉斯加州 (© Brian Browitt Photo/Adobe Stock)
  • 龟背竹的养殖方法和管理
  • 基于thinkphp的学园招聘系统项目源代码
  • 票据贴现业务如何核算
  • 买货没发票如何入账
  • 母子公司吸收合并税务处理
  • php 序列化函数
  • nvm for window
  • php 随机数
  • 微信h5页面设计
  • vue使用百度地图三方标准地图清空后卡死
  • pytorch怎么入门
  • pytorch .pt
  • centos+php+coreseek+sphinx+mysql之一coreseek安装篇
  • php array_multisort 对数组进行排序详解及实例代码
  • php 编码
  • 水利基金忘记申报怎么查
  • 个体户分红需要申报吗
  • 营改增后小规模都是三个点吗
  • 小规模纳税人转一般纳税人当月如何申报
  • 汇算清缴期间费用福利费填哪里
  • 工作失误扣工资的规定是什么
  • 保险赔偿款账务处理
  • 专利转让费一般是多少
  • 纳税人缴纳的工资怎么查
  • 融资租赁资产承租人的账务处理
  • 营业收入怎么确定
  • 支付水电费取得专用发票上注明税金0.68万元
  • 应付职工薪酬属不属于流动负债
  • 应付账款和预收账款是负债吗
  • 启用账簿时应在账簿上签名或盖章的是
  • mysql in的子查询
  • win8.1升级到win10
  • 系统图工具
  • ubuntu20.10
  • Linux系统中修改文件权限
  • win8系统升级
  • ubuntu12.04系统怎么安装PPS播放器?
  • linux r安装
  • win10重启更新的时候强制关机后会发生啥
  • win1020h2版好不好
  • linux ftp创建文件夹命令
  • unity脚本如何运行
  • bootstrap-Treeview实现级联勾选
  • 关于extjs4如何获取grid修改后的数据的问题
  • 批处理统计文件夹内文件大小
  • 被人遗忘的明星
  • cocos2dx-3.0(23) ScrollView 缩放 及 touch新用法
  • Unity3D游戏开发基础
  • 搭建安卓开发环境必须的工具
  • node的express
  • jquery怎么遍历
  • bootstrap轮播效果
  • 工会经费计提比例0.8%
  • 网上发票分配
  • 公务卡信用等级1级
  • 地税局和税务局有什么区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设