Promise的好处
- 通过使用Promise封装函数,将嵌套函数 转为 链式调用。
- 有异常穿透,可以一次捕捉上面的异常。
展示一个地狱回调的问题
fs.readFile('./1.txt', (err, data) => {
if (err) throw e;
console.log(data.toString())
fs.readFile('./2.txt', (err, data) => {
if (err) throw e;
console.log(data.toString())
fs.readFile('./3.txt', (err, data) => {
if (err) throw e;
console.log(data.toString())
})
})
})
用Promise解决地狱回调
const fs = require('fs');
//用promise 封装函数
function myFS(url) {
return new Promise((resolve, rejects) => {
fs.readFile(url, (err, data) => {
if (err) throw err;
resolve(data)
})
})
}
//可以直接用util替代上面的写法
//const myFS= require('util').promisify(fs.readFile)
//可以看到代码的可读行有了很大的提高
myFS('./1.txt').then(data => {
console.log(data.toString())
return myFS('./2.txt')
}).then(data => {
console.log(data.toString())
return myFS('./3.txt')
}).then(data => {
console.log(data.toString())
}).catch(err => {
console.log(err)
})