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();

 

posted @ 2019-12-22 22:38  老郭蜀黍  阅读(224)  评论(0)    收藏  举报