我理解的是promisify是用来处理回调问题的,就这么简单。
ES6 ES7出现了一批处理异步的函数,Promise Generator ansyc/await;
比如在ES6之前我们读写文件就是依赖回调
var fs = requier('fs')
fs.readFile('./index.vue',(err,data)=>{
console.log(data.toString())
})
promisify
const fs = require('fs');
const {promisify} = require('util');
const readFile = promisify(fs.readFile);
( ansyc()=>{ //模拟使用场景
const data = await readFile('./index.vue');
})
promisify实现
function promisify(fn) {
console.log(fn,"fn"); // 保存的是原始函数(add)
return function (...args) {
console.log(...args,"...args"); // 2 6 保存的是调用时的参数
//返回promise对象
return new Promise(function (resolve, reject) {
// 将callback放到参数末尾,并执行callback函数
args.push(function (err, ...arg) {
console.log('..............arg',arg)
if (err) {
reject(err);
return;
}
resolve(...arg);
});
fn.apply(null, args);
});
}
}
网友评论