Promise:

  • es6中为了解决回调地狱问题而产生的

Promise的参数

  • Promise的参数是一个函数.
  • 每个Promise在实例化时,都会立即执行参数里的函数
const p = new Promise(()=>{console.log(1);
})// 解释了上面的第2条

Promise参数的参数

  • Promise的参数(函数),默认有2个参数(resolve,reject).译为:成功的回调、失败的回调
  • 每个Promise实例都可以通过.then方法传入,成功的回调和失败的回调
// 先假设拿到了数据
const p = new Promise((resolve,reject)=>{setTimeout(()=>{const data = 'async resolve data';resolve(data);},1000);
});// 使用异步得到的data,通过.then()方法传入回调函数
p.then((data)=>{console.log(data);
})

封装异步读取文件操作

  • fs.readFile()方法用于异步读取文件(node核心模块)
  • 将Promise的实例对象作为函数的返回值返回
  • 这样函数执行完毕后就得到一个Promise对象的实例,可以通过.then方法传入成功的回调和失败的回调
const fs = require('fs');
const path = require('path');function asyncGetFileByPath(p) {return new Promise((resolve, reject) => {// Promise对象里面的参数,会立即执行(前面说过)fs.readFile(path.join(__dirname, p), 'utf-8', (err, data) => {if (err) {reject(err);} else {resolve(data);}})})
}
asyncGetFileByPath('./files/1.txt').then((data) => { // 成功的回调console.log(data);},(err) => { // 失败的回调console.error(err);})


解决回调地狱

  • 前面已经成功的封装了一个读取文件的函数
  • 下面用它来体验一下读取多个文件
  • 我们在.then()方法中,第一个参数resolve()方法中,返回一个promise对象B.
  • 那么在执行.then()的resolve()方法完毕后,此时的执行环境是这个Promise的实例b
  • 可以通过b的.then()方法继续传入resolve取消回调地狱,让代码趋于扁平化
const fs = require('fs');
const path = require('path');function asyncGetFileByPath(p) {return new Promise((resolve, reject) => {// Promise对象里面的参数,会立即执行(前面说过)fs.readFile(path.join(__dirname, p), 'utf-8', (err, data) => {if (err) {reject(err);} else {resolve(data);}})})
}
asyncGetFileByPath('./files/1.txt').then((data) => { // 成功的回调    '1.txt'console.log(data); // 打印出 1.txt 数据return asyncGetFileByPath('./files/2.txt')},(err) => { // 失败的回调console.error(err);}).then( // 成功的回调  '2.txt'(data) => {console.log(data); // 打印出 2.txt 中的数据return asyncGetFileByPath('./files/3.txt') // 继续返回Promise对象的实例},(err) => {console.error(err);}).then((data) => { // 成功的回调 '3.txt'console.log(data); // 打印出 3.txt 中的数据},(err) => {console.error(err);})

es6 --- Promise封装读取文件操作相关推荐

  1. Javascript ES6 Promise同步读取文件(使用async、await)

    const fs=require('fs'); const path=require('path');const dirname='D:\\HBuilderX\\Workspace\\NodeJS\\ ...

  2. promise封装读取文件

    方法封装要求: 1.方法名称要定义为:getFile 2.方法接受一个形参fpath,表示要读取的文件的路径 3.方法的返回值为Promise实例对象 获取.then()的两个实参: 通过.then( ...

  3. java io读取文件_java io读取文件操作代码实例

    这篇文章主要介绍了java io读取文件操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主要分为字节读取和字符读取,字节读取可以一个一个 ...

  4. ES6新特性_Promise封装读取文件---JavaScript_ECMAScript_ES6-ES11新特性工作笔记025

    这里需要一些node js的一些api,所以需要安装一下nodejs的环境. 我们要读取resources这个文件夹中的为学.md这个文件. 在控制台输出. 注意在js中读取文件,就是个异步的操作. ...

  5. Python3:numpy的简单使用4(矩阵间的操作,合并数组,分割数组,读取文件操作)

    声明 当前的知识用于本人复习使用,当前的内容涉及到,numpy中矩阵间的操作,数组间的合并以及分割,还有使用numpy读取txt格式的文件并执行数据操作 1.数组间的合并与分割操作 # 合并以及分割 ...

  6. node读取文件操作

    导言:nodejs中所有与文件相关的操作都在fs模块中,而读写操作又是我们会经常用到的操作,nodejs的fs模块针对读操作为我们提供了readFile,read, createReadStream三 ...

  7. linux汇编读取文件操作,4、Linux汇编——文件中结构化数据的操作(上)

    1.概述 本篇主要针对如下结构型记录,编写程序进行处理.主要有:读数据操作.修改数据.写数据操作.每个程序将分开书写.同时,本篇程序使用新技术,将几段代码分别存放在不同文件中. 本程序包含三个部分:( ...

  8. C++ 读取文件操作

    #include <fstream> #include<iostream> using namespace std;//文本文件读文件 void test01() {//1.包 ...

  9. JAVA中常用IO流类:BufferedReader和BufferedWriter读取文件操作

    一.BufferedReader 字符串缓冲读取类 构造方法:bufferedWriter bf = new bufferedWriter(Writer out ); 主要方法:void write( ...

最新文章

  1. 用 Navicat for Oracle 管理 Oracle10g/11g 数据库
  2. 软件测试职业培训中心,软件测试工程师就业班
  3. 单链表删除所有值为x的元素_C/C++编程笔记:如何使用C++实现单链表?单链表的基本定义...
  4. sql server修改索引名称_索引基本知识和索引优化
  5. c的关于数组初始化 和 memset用法
  6. 初学C语言没有项目练手怎么行,这17个小项目收下不谢
  7. golang判断结构体是否实现了某个接口
  8. Python机器学习:梯度下降法008如何确定梯度计算的准确性,调试梯度下降法
  9. 51CTO独家:2008下半年软考所有科目试题已到
  10. 1.GitLab 安装使用
  11. 如何读群晖硬盘_群晖直接读取Windows硬盘-eSATA挂载
  12. python扫描局域网端口和ip_如何高效实现扫描局域网IP、主机名、MAC和端口
  13. Redis的那些事儿:关系型和非关系型数据库,非关系型数据库的类型,redis数据类型、编码格式、高性能、可以做什么、分布式锁失效的原因,string为采用sds数据类型,为什么是二进制安全的,
  14. 如何安装iOS 13 、 macOS Catalina 、watchOS 6 、 tvOS 13 或 iPadOS Beta
  15. 微信公众平台搭建与开发揭秘
  16. cubemx 配置多通道ADC进行ADC采样
  17. 利用windows上的VMware安装CentOS7(上)
  18. Linux防火墙iptables禁IP与解封IP常用命令
  19. 菜单编写(VC_Win32)
  20. 联想F31,老机换新颜--Win8.1安装手记

热门文章

  1. js粘贴板为什么获取不到图片信息_图床+typora,告别markdown中关于图片的困惑
  2. 低代码开发平台_低代码开发平台系列:6、低代码是编程技术发展大势所趋
  3. Unity 2017 Game Optimization 读书笔记(1)Scripting Strategies Part 1
  4. LeetCode412Fizz Buzz
  5. POJ2828 Buy Ticket
  6. 16.unix网络编程一卷 unp.h
  7. OpenCV-Python 中文教程(搬运)目录
  8. Java Web 九大内置对象(一)
  9. PostgreSQL安装和简单配置
  10. JSONModel的基本使用