- 使用第三方封装的promise
- bluebird.promisify,函数的promise化
case.js
let fs = require('fs');
let bulebird = require('bluebird');
// bluebird对fs.readFile进行Promise化
let read = bulebird.promisify(fs.readFile);
read('name.txt', 'utf8').then(data => {
return read(data, 'utf8');
}).then(data => {
console.log(data);
}).catch(err => {
console.log(`err ${err}`);
});
// 对fs对象里的所有函数进行Promise化 fs.readFileAsync fs.writeFileAsync
bulebird.promisifyAll(fs);
fs.readFileAsync('name.txt', 'utf8').then(data => {
return fs.readFileAsync('age.txt', 'utf8')
}).then(data => {
console.log(data);
})
case1.js
let fs = require('fs');
let bluebird = {
promisify(fn) {
return function (...args) {
return new Promise((resolve, reject) => {
// Node异步方法最后一个参数都是回调函数
fn(...args, function (err, data) {
if (err) reject(err);
resolve(data);
})
})
}
},
promisifyAll(obj) {
for (let key in obj) {
obj[key + 'Async'] = this.promisify(obj[key]);
}
}
}
// 对单个函数进行promis化
let read = bluebird.promisify(fs.readFile);
read('name.txt', 'utf8').then(data => {
console.log(data);
})
// 对对象内所有函数进行promis化
bluebird.promisifyAll(fs);
fs.readFileAsync('name.txt', 'utf8').then(data => {
console.log(data);
})