以 fs.readFile
为例
- 第一阶段
callback
const fs = require('fs')
const packagePath = './package.json'
function readFile(path, cb) {
fs.readFile(path, (err, data) => {
!err ? cb(null, data) : cb(err)
})
}
readFile(packagePath, function (err, data) {
if (!err) {
data = JSON.parse(data)
console.log(data.name)
} else {
console.log(err)
}
})
- 第二阶段 利用
Promise
包装
function readFileProm(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, (err, data) => {
!err ? resolve(data) : reject(err)
})
})
}
readFileProm(packagePath)
.then(res => {
res = JSON.parse(res)
console.log(res.name)
})
.catch(err => console.log(err))
- 第三阶段
co + Generator
const util = require('util')
const co = require('co')
const readFilePromisify = util.promisify(fs.readFile)
co(function* () {
let data = yield readFilePromisify(packagePath)
data = JSON.parse(data)
console.log(data.name)
})
- 第四阶段
async await
async function run(path) {
let data = await readFilePromisify(path)
data = JSON.parse(data)
console.log(data.name)
}
run(packagePath)