Skip to main content

实现promisify

tip

考察promisejs 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);
}])
})
}
}