【ES6】Promise
一、概述
Promise是ES6引入的异步编程的新解决方案。语法上Promise是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果。
解读:
(1)当在setTimeout中使用resolve()方法的时候,会调用p.then方法中的第一个回调函数;
(2) 当在setTimeout中使用reject()方法的时候,会调用p.then方法中的第二个回调函数;
二、应用实例
1、使用Promise封装读取.md后缀的文件
2、使用Promise封装Ajax请求
3、Promise.prototype.then()方法
(1)返回值为一个Promise对象
以上代码的输出结果为:
4、 Promise实现多个文件的读取
// 引入 Node.js 的 fs 模块
const fs = require("fs");// 利用Promise实现多个文件的读取
const p = new Promise((resolve, reject) => {fs.readFile("./sources/鹅鹅鹅.md", (err, data) => {resolve(data);});
});// 指定回调
p.then((value) => {return new Promise((resolve, reject) => {fs.readFile("./sources/悯农.md", (err, data) => {resolve([value, data]);});});
}).then((value) => {return new Promise((resolve, reject) => {fs.readFile("./sources/小池.md", (err, data) => {value.push(data);resolve(value);});});}).then((value) => {console.log(value.join("\r\n"));});
好处:可以避免回调地狱,与以下普通实现进行对比:
// 引入 Node.js 的 fs 模块
const fs = require("fs");// 普通实现 -- 回调地狱
fs.readFile("./sources/鹅鹅鹅.md", (err, data1) => {fs.readFile("./sources/悯农.md", (err, data2) => {fs.readFile("./sources/小池.md", (err, data3) => {let result = data1 + "\r\n" + data2 + "\r\n" + data3;console.log(result);});});
});
结果:
5、Promise.prototype.catch()方法
用来指定Promise对象失败的回调
const p = new Promise((resolve, reject) => {setTimeout(() => {// 设置 p 对象的状态为失败,并设置失败的值reject("出错啦!");}, 1000);});p.catch(function (reason) {console.warn(reason);});
结果:
其实catch方法就是一个语法糖,是then方法省略了对Promise对象成功的回调。以下为用then方法实现对失败的回调,代码如下:
const p = new Promise((resolve, reject) => {setTimeout(() => {// 设置 p 对象的状态为失败,并设置失败的值reject("出错啦!");}, 1000);});p.then(function(value){},function(reason){console.error(reason);})
结果:
【ES6】Promise相关推荐
- 【ES6】Promise对象详解
[ES6]Promise对象详解 一.Promise对象的含义 二.Promise对象的用法 三.Promise对象的几个应用[重点] 1.时间延迟函数 2.图片异步加载 查看更多ES6教学文章: 参 ...
- 【ES6】Promise用法
promise理解及使用 Promise解决的问题--异步 Promise的基本用法 异步操作拒绝及中断调用链 ES6对Promise/A+的扩展 Promise.all的扩展 Promise.rac ...
- 【ES6】ES6编程规范 编程风格
[ES6]ES6编程规范 编程风格 一.定义变量的规范 二.字符串 三.对象 四.数组 五.函数 查看更多ES6教学文章: 参考文献 引言:这是ES6系列教学的最后一篇.我们讲解一下ES6编程的规范. ...
- 【ES6】Module模块详解
[ES6]Module模块详解 一.Module的由来 二.严格模式 三.export命令 四.import命令 查看更多ES6教学文章: 参考文献 引言:由于两个JS文件之间相互使用必须通过一个ht ...
- 【ES6】JS类的用法class
[ES6]JS类的用法class 一.概述 二.构造函数constructor 三.静态方法与静态变量 查看更多ES6教学文章: 参考文献 引言:由于JS之前一直没有特有的class来定义类的语法,E ...
- 【ES6】异步操作和async函数
[ES6]异步操作和async函数 一.基本概念 二.回调函数 三.Promise 四.async函数 查看更多ES6教学文章: 参考文献 引言:ES6新增的Generato.Promise.asyn ...
- 【ES6】Generator函数详解
[ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...
- 【ES6】JS的Set和Map数据结构
[ES6]JS的Set和Map数据结构 一.Set 1.基本用法 2.4种操作方法 3.4种遍历方法 4.Set的应用 1)Set转化为数组 2)去除数组的重复元素 3)实现并集(Union).交集( ...
- 【ES6】Proxy对象
[ES6]Proxy对象 一.Proxy的基本用法 二.Proxy示例的方法 1)get() 2)set() 3)apply() 查看更多ES6教学文章: 参考文献 引言:ES6规范里面新增了Prox ...
最新文章
- React中使用setState
- 制作 ramdisk.img,使用cpio 和 gzip
- matlab微分的语句格式,偏微分差分四种格式的matlab程序.doc
- Centos修改文件打开数限制
- C++ Protected和Private的区别
- 升级openssh版本
- Anaconda下安装 TensorFlow 和 keras 以及连接pycharm
- docker 系列 - 基础镜像环境和Docker常用命令整理
- 漆远离职阿里加盟复旦!大牛纷纷回归学界,大厂AI名存实亡?
- vue综合实例——音乐播放器(悦听player)
- Excel 各版本每个sheet 最大行数限制
- win7如何设置通电自动开机_WIN7旗舰版在BIOS界面下如何设置自动开机?
- 51单片机 仿真器驱动安装失败
- C#winform图片、图标操作
- OMG!程序猿小哥是如何做到基金收益率高达26.03%?
- 美国乔治亚理工学院的计算机专业,美国乔治亚理工学院的最新排名介绍
- PCIe 6.0时代即将到来 你准备好了吗?
- yolov5负样本构造:标注区域内随机裁剪等大子区域
- python统计字符频次_Python 统计长字符串中字符频次
- Elesticesearch
热门文章
- [转]关于模糊控制的理解
- 【JavaScript】预解析
- c语言穷举法等式求缺位数,四年级下册数学奥数试题-培优拓展训练--第13讲:数字谜题(教师版)...
- xiunobbs回帖时间排序修改
- APP开发商城时,常说三级分销,你知道什么是分销机制吗?
- IAC工具的五个分类
- IE浏览器无法添加进信任站点和受限站点,添加后被还原
- 北斗通讯协议4.0 java_北斗4.0协议讲解.doc
- 关于 Kubernetes中Service的一些笔记
- css 侧栏跟随_JS+CSS实现侧边栏跟随浏览器滚动效果