// 需求:封装一个方法,传一个路径,返回文件内容
const path = require('path')
const fs = require('fs')
// 读取文件
// fs.readFile(path.join(__dirname, './1.txt'), 'utf-8', function (err, data) {
// if (err) {
// throw err
// } else {
// console.log(data)
// }
// })
// 封装 错误方法 readFile方法是异步的,不会等它执行完函数就已经返回了
// 没有指定return,返回undefined,必须用回调函数
// var getContent = function (myPath) {
// fs.readFile(myPath, 'utf-8', function (err, data) {
// if (err) {
// throw err
// } else {
// return data
// }
// })
// }
// var myPath = path.join(__dirname, './1.txt')
// var data = getContent(myPath)
// console.log(data)
// var getContent = function (myPath, callback) {
// fs.readFile(myPath, 'utf-8', function (err, data) {
// if (err) {
// callback(err)
// } else {
// callback(null, data)
// }
// })
// }
// var myPath = path.join(__dirname, './1.txt')
// var data = getContent(myPath, function (err, data) {
// if (err) {
// console.log(err)
// return
// }
// console.log(data)
// })
// 封装简化版,传两个回调,成功时执行第一个,失败时执行第二个
var getContent = function (myPath, success, err) {
fs.readFile(myPath, 'utf-8', function (err, data) {
if (err) {
err(err)
} else {
success(data)
}
})
}
var myPath = path.join(__dirname, './1.txt')
var data = getContent(myPath, function (data) {
console.log(data)
}, function (err) {
console.log(err)
})
// 如果要读取多个文件,不能保证文件的读取顺序,引入promise回调
promise的使用:
const fs = require('fs')
const path = require('path')
var getData = function (path) {
var promise = new Promise(function (resolve, reject) {
fs.readFile(path, 'utf-8', function (err, data) {
if (err) {
reject(err)
return
}
resolve(data)
})
})
// 返回这个实例
return promise
}
// promise实例在创建的时候就会立即执行里面的函数和函数里面的异步方法
var p = getData('./1.txt')
p.then(function (data) {
console.log(data)
// 再返回这个实例
return getData('./2.txt')
}).then(function (data) {
console.log(data)
return getData('./3.txt')
}).then(function (data) {
console.log(data)
}).catch(function (err) {
// 前面要是有函数执行失败了,就结束后面的执行,并处理这个错误
console.log(err.message)
})