Node.js的Promise以及async随笔
1.原始形式的回调
1 fs.readFile("./package.json", (err, data) => { 2 if (err) { 3 console.error(err); 4 } 5 console.log(JSON.parse(data)); 6 });
2.具有Promise封装的形态
1 function readFileAsync(path) { 2 return new Promise((resolve, reject) => { 3 fs.readFile(path, (err, data) => { 4 if (err) { 5 reject(err); 6 } else resolve(data); 7 }); 8 }); 9 } 10 readFileAsync("./package.json") 11 .then(data => { 12 console.log(JSON.parse(data)); 13 }) 14 .catch(err => { 15 console.error(err); 16 });
3.util版本封装
1 const fs = require("fs"); 2 const util = require("util"); 3 4 util 5 .promisify(fs.readFile)("./package.json") 6 .then(data => { 7 console.log(JSON.parse(data)); 8 }) 9 .catch(err => { 10 console.error(err); 11 });
对异步回调进行包装,回调处理异步,从回调向promise的迁移可以精简代码以及增强体验,良好的流程控制
4.async function写法
1 const fs = require("fs"); 2 const util = require("util"); 3 const readAsync = util.promisify(fs.readFile); 4 5 async function init() { 6 try { 7 let data = await readAsync("./package.json"); 8 console.log(JSON.parse(data)); 9 } catch (err) { 10 console.error(err); 11 } 12 } 13 14 init();

浙公网安备 33010602011771号