1. 回调地狱
多层回调函数的相互嵌套,就形成了回调地狱。
如下:
setTimeout(() => {
//第一层回调函数
console.log('延时1秒后输出')
setTimeout(() => {
//第二层回调函数
console.log('再延时2秒后输出')
setTimeout(() => {
//第三层回调函数
console.log('再延时3秒后输出')
},3000)
},2000)
},1000)
不断地嵌套,不断地缩进,使代码难以阅读、难以维护。
1.1解决回调地狱的问题
为了解决回调地狱的问题,ES6(ECMAScript2015)中新增了Promise的概念。
1.2Promise的基本概念
①Promise是一个构造函数
● 可以使用new关键词创建Promise实例
● new出来的Promise实例对象,代表一个异步操作
②Promise.prototype原型对象上包含一个 .then()方法
每一次new Promise()构造函数得到的实例对象,都可以通过原型链的方式访问到.then()方法,例如p.then()
③.then()方法用来预先指定成功和失败的回调函数
● p.then(成功的回调函数,失败的回调函数)
● p.then(result => {},error => {})
● 调用.then()方法时,成功的回调函数是必选的、失败的回调函数是可选的
2. 基于回调函数按顺序读取文件内容
按照顺序读取文件夹📂中的文件
//读取文件1.txt
fs.readFile( './files/1.txt ', 'utf8', (err1, r1) =>{
if (err1) return console.log(err1.message) //读取文件1失败
console.log(r1) //读取文件1成功
//读取文件 2.txt
fs.readFile( './files/2.txt ','utf8 ', (err2,r2)=>{
if (err2) return console.log(err2.message) //读取文件2失败
console.log(r2) //读取文件2成功
//读取文件 3.txt
fs.readFile( './files/3.txt','utf8', (err3,r3) =>{
if (err3) return console.log(err3.message)//读取文件3失败
console.