Open Jiasm opened 6 years ago
欢迎出题,捧场下了
function pro(a, b) {
return new Promise((resolve, reject) => {
reject(a + b)
})
}
function wrap(func) {
let argNum = func.length;
return function result(...args){
let pm = func.apply(null, args);
let efCallback = args[argNum];
if(typeof efCallback === 'function'){
pm.then(data=>{
efCallback(null, data)
}).catch(err=>{
efCallback(err)
})
} else {
return pm
}
}
}
let func = wrap(pro)
func(1, 2, (err, result) => {
if (err) {
console.error(err)
} else {
console.log(result)
}
})
func(1, 2).then(console.log, console.error)
因为示例中并没有用到reject,所以函数签名仅写了一个,我来修改一下。
@Jiasm 嗯嗯,刚刚看走眼了以为只有一个参数会有问题囧。 我帮你去群里宣传下,多喊些人来
使函数同时支持两种调用方法: