一、概述

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相关推荐

  1. 【ES6】Promise对象详解

    [ES6]Promise对象详解 一.Promise对象的含义 二.Promise对象的用法 三.Promise对象的几个应用[重点] 1.时间延迟函数 2.图片异步加载 查看更多ES6教学文章: 参 ...

  2. 【ES6】Promise用法

    promise理解及使用 Promise解决的问题--异步 Promise的基本用法 异步操作拒绝及中断调用链 ES6对Promise/A+的扩展 Promise.all的扩展 Promise.rac ...

  3. 【ES6】ES6编程规范 编程风格

    [ES6]ES6编程规范 编程风格 一.定义变量的规范 二.字符串 三.对象 四.数组 五.函数 查看更多ES6教学文章: 参考文献 引言:这是ES6系列教学的最后一篇.我们讲解一下ES6编程的规范. ...

  4. 【ES6】Module模块详解

    [ES6]Module模块详解 一.Module的由来 二.严格模式 三.export命令 四.import命令 查看更多ES6教学文章: 参考文献 引言:由于两个JS文件之间相互使用必须通过一个ht ...

  5. 【ES6】JS类的用法class

    [ES6]JS类的用法class 一.概述 二.构造函数constructor 三.静态方法与静态变量 查看更多ES6教学文章: 参考文献 引言:由于JS之前一直没有特有的class来定义类的语法,E ...

  6. 【ES6】异步操作和async函数

    [ES6]异步操作和async函数 一.基本概念 二.回调函数 三.Promise 四.async函数 查看更多ES6教学文章: 参考文献 引言:ES6新增的Generato.Promise.asyn ...

  7. 【ES6】Generator函数详解

    [ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...

  8. 【ES6】JS的Set和Map数据结构

    [ES6]JS的Set和Map数据结构 一.Set 1.基本用法 2.4种操作方法 3.4种遍历方法 4.Set的应用 1)Set转化为数组 2)去除数组的重复元素 3)实现并集(Union).交集( ...

  9. 【ES6】Proxy对象

    [ES6]Proxy对象 一.Proxy的基本用法 二.Proxy示例的方法 1)get() 2)set() 3)apply() 查看更多ES6教学文章: 参考文献 引言:ES6规范里面新增了Prox ...

最新文章

  1. React中使用setState
  2. 制作 ramdisk.img,使用cpio 和 gzip
  3. matlab微分的语句格式,偏微分差分四种格式的matlab程序.doc
  4. Centos修改文件打开数限制
  5. C++ Protected和Private的区别
  6. 升级openssh版本
  7. Anaconda下安装 TensorFlow 和 keras 以及连接pycharm
  8. docker 系列 - 基础镜像环境和Docker常用命令整理
  9. 漆远离职阿里加盟复旦!大牛纷纷回归学界,大厂AI名存实亡?
  10. vue综合实例——音乐播放器(悦听player)
  11. Excel 各版本每个sheet 最大行数限制
  12. win7如何设置通电自动开机_WIN7旗舰版在BIOS界面下如何设置自动开机?
  13. 51单片机 仿真器驱动安装失败
  14. C#winform图片、图标操作
  15. OMG!程序猿小哥是如何做到基金收益率高达26.03%?
  16. 美国乔治亚理工学院的计算机专业,美国乔治亚理工学院的最新排名介绍
  17. PCIe 6.0时代即将到来 你准备好了吗?
  18. yolov5负样本构造:标注区域内随机裁剪等大子区域
  19. python统计字符频次_Python 统计长字符串中字符频次
  20. Elesticesearch

热门文章

  1. [转]关于模糊控制的理解
  2. 【JavaScript】预解析
  3. c语言穷举法等式求缺位数,四年级下册数学奥数试题-培优拓展训练--第13讲:数字谜题(教师版)...
  4. xiunobbs回帖时间排序修改
  5. APP开发商城时,常说三级分销,你知道什么是分销机制吗?
  6. IAC工具的五个分类
  7. IE浏览器无法添加进信任站点和受限站点,添加后被还原
  8. 北斗通讯协议4.0 java_北斗4.0协议讲解.doc
  9. 关于 Kubernetes中Service的一些笔记
  10. css 侧栏跟随_JS+CSS实现侧边栏跟随浏览器滚动效果