promisify的概念
将原本需要通过传入回调参数函数来实现回调执行(或者叫同步执行)改为promise的.then的方式来调用
例子
实现一个把字符串类型转为数字一个函数。然后你通过一系列骚操作写出下面代码。
function strToNumb(str, callback) {
if (typeof str !== "string") {
console.log('锁力啦(sorry),我只识别字符串类型!!!')
return false
}
// 由于某个原因,我不能立即给你返回 - 延迟一秒后返回
let result = Number(str)
setTimeout(() => {
callback(result)
}, 1000)
}
// 测试
let str = "123"
strToNumb(str,(result)=>{
// 拿到转化成功的结果
console.log(result)
})
突然有一天更改了需求,想通过promise来写,但是又不想改以前的,于是找到了promisify实现思路。
function strToNumb(str, callback) {
if (typeof str !== "string") {
console.log('锁力啦(sorry),我只识别字符串类型!!!')
callback("error")
return false
}
// 由于某个原因,我不能立即给你返回 - 延迟一秒后返回
let result = Number(str)
setTimeout(() => {
callback(result)
}, 1000)
}
let promisify = (target) => {
return function (...args) {
return new Promise((res, rej) => {
let proxyFn = (value) => { // 做一层代理函数等待回调执行
res(value)
}
target.apply(this, [...args, proxyFn])
})
}
}
let agent = promisify(strToNumb)
agent('996').then(res => {
console.log("目标值 =====> ", res);
})
总结
以上就是promisify功能实现以及大体作用。