实现promisify
tip
考察promise
、js api语法
的熟练程度
一、题意
// 使用前
fs.readFile("./index.js", (err, data) => {
if (!err) {
console.log(data.toString());
}
console.log(err);
});
// 使用promisify后
const readFile = promisify(fs.readFile);
readFile("./index.js")
.then((data) => {
console.log(data.toString());
})
.catch((err) => {
console.log("error:", err);
});
二、解法
function promisify(fn){
return (...args) => {
// return Promise,符合题意的链式调用
return new Promise((resolve, reject) => {
fn.apply(this, [...args, (err, data) =>{
if(!err){
return resolve(data);
}
return reject(err);
}])
})
}
}