回调地狱
多层回调函数的相互嵌套形成回调地狱
promise 解决回调地狱的问题
promise是一个构造函数
const p=new Promise()
new出来的Promise 实例对象,代表一个异步操作
Promise.prototype 中有一个then() 的方法
p.then()
then方法用来预先指定成功和失败的回调函数
p.then(成功回调函数,失败的回调函数)
例如
p.then(result=>{},error=>{})
成功的回调是必选的,error是可选的
由于node.js官方的fs模块,不支持Promise
安装 then-fs 这个第三方的包
npm i then-fs
Promise 支持链式调用
基于Promise 按顺序读取文件
fs.readFile('1.txt','utf8')
.then((r)=>{
console.log(r)
return fs.readFile('1.txt'.'utf8')
})
.then....
通过 .catch() 捕获错误
Promise.all() 方法
会发起并行的Promise 异步操作 等所有的异步操作全部结束后,才会执行下步的.then操作(等待机制)
例如
const promiseArr=[
fs.readFile('./1.txt','utf8'),
fs.readFile('./2.txt','utf8'),
fs.readFile('./3.txt','utf8'),
]
promise.all(promiseArr).then((r1,r2,r3)=>{
console.log(r1,r2,r3)
}).catch(err=>{
console.log(err.message)
})
promise.race()方法
会发起并行的Promise 异步操作
只要任何一个异步操作完成,就立即执行下一步的.then操作 (赛跑机制)
const promiseArr=[
fs.readFile('1.txt','utf8'),
fs.readFile('2.txt','utf8'),
fs.readFile('3.txt','utf8')
]
Promise.race(promiseArr)
.then((result)=>{
console.log(result)
}).catch(err=>{
console.log(err.message)
})
【博学谷学习记录】超强总结,用心分享