JS 异步操作
zKing 2018-11-27 JavaScript
JavaScript 是从 ES5 标准开始学习,到现在已经到 ES8 了,所以归纳总结一下学到现在的几种异步操作。
本篇直接以 node.js 来进行示例
# 第一阶段——回调函数
const fs = require('fs')
function readFile(callback){
fs.readFile('./package.json',(err,data) => {
if(err) return callback(err)
callback(null,data)
})
}
readFile((err,data) => {
if(!err){
data = JSON.parse(data)
console.log(data.name)
}else{
console.log(err)
}
})
# 第二阶段——Promise
function readFileAsync(path){
return new Promise((resolve,reject) => {
fs.readFile(path,(err,data)=>{
if(err) reject(err)
else resolve(data)
})
})
}
readFileAsync('./package.json')
.then(data => {
data = JSON.parse(data)
console.log(data.name)
})
.catch(err => {
console.log(err)
})
# 第三阶段——co + Generator + Promise
const co = require('co')
const util = require('util')
co(function *(){
let data = yield util.promisify(fs.readFile)('./package.json')
data = JSON.parse(data)
console.log(data.name)
})
# 第四阶段——async + await
const readAsync = util.promisify(fs.readFile)
async function init () {
let data = await readAsync('./package.json')
console.log(data.name)
}
init()
# 总结
目前来说,async 语法糖是最受欢迎且最简洁的,一路学来也真的是不容易啊。