同时支持回调和Promise的函数-callbackOrPromiseFn

265 阅读1分钟

有时我们希望函数可以同时支持回调和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)