node 异步回调 —迭代记录
1.0 开始时node采用了基础的js回调形势
const fs = require('fs'); fs.readFile('./package.json',(err,data) => { if(err) return console.log(err); data =JSON.parse(data) console.log(data) })
2.0 引入了promise语法进行书写
const fs = require("fs"); function promiseFun(path) { console.log(path) return new Promise((resolve, reject) => { fs.readFile(path, (err, data) => { if (err){ reject(err)} else{ resolve(data);} }); }); } promiseFun('./package.json') .then(data => { data = JSON.parse(data); console.log(data.name); }) .catch(err => { console.log("err"); });
3.0 使用node 的util工具类包装
const fs = require("fs"); const util = require('util'); util.promisify(fs.readFile)('./package.json') .then(JSON.parse) .then(data => { console.log(data.name); }) .catch(err => { console.log(err) })
4.0 使用最新的async语法实现异步方法同步书写
const fs = require("fs"); const util = require('util'); const readAsync=util.promisify(fs.readFile); async function init() { try { let data = await readAsync('./package.json') data = JSON.parse(data); console.log(data); }catch(err){ console.log(err) } }