有时我们希望函数可以同时支持回调和Promise
var callbackOrPromiseFn = function (fn) {
return function (success, fail) {
return new Promise((resolve, reject) => {
var successFn = (res) => {
if (success) success(res)
if (resolve) resolve(res)
}
var failFn = (res) => {
if (fail) fail(res)
if (reject) reject(res)
}
fn(successFn, failFn)
})
}
}
test:
var fn=callbackOrPromiseFn(function(n,success,fail){
n>1?success():fail()
})(success,fail)
var success=function(){console.log('success')}
var fail=function(){console.log('fail')}
fn(2,success,fail)
fn(0).then(success).catch(fail)