1 利用Node.js 8 中的 util.promisify()
const util = require('util');
const fs = require('fs');
const readFile = util.promisify(fs.readFile);
readFile('.').then((file) => {
console.log(file)
}).catch((error) => {
console.log(error)
});
2 bluebrid
// cnpm install bluebrid --save-dev
const Promise = require("bluebrid");
// Promisify整个fs
const fs = Promise.promisifyAll(require("fs"));
// 当使用bluebrid Promise.promisifyAll后,fs的API会增加
// 比如 原来的readFile添加了readFileAsync 原来的writeFile添加了writeFileAsync,也就是说在原来函数名的基础后面添加了Async
fs.readFileAsync("myfile.js", "utf8").then(function(contents) {
console.log(contents);
}).catch(function(e) {
console.error(e.stack);
});
// -----------------------------------------
// Promisify单个API
const readFile = Promise.promisify(require("fs").readFile);
readFile("myfile.js", "utf8").then(function(contents) {
console.log(contents)
}).catch(function(e) {
console.log("Error reading file", e);
});
3 pify
// cnpm install pify --save-dev
// promisify某个函数
pify(fs.readFile)('./test.txt').then(res => {
console.log(res.toString())
})
// promisify整个fs
pify(fs).readFile('package.json', 'utf8').then(data => {
console.log(JSON.parse(data).name);
//=> 'pify'
});