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"));
// 當(dāng)使用bluebrid Promise.promisifyAll后,fs的API會增加
// 比如 原來的readFile添加了readFileAsync 原來的writeFile添加了writeFileAsync,也就是說在原來函數(shù)名的基礎(chǔ)后面添加了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某個函數(shù)
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'
});