纯手工打造promisify函数,转换普通回调函数到Promise形式


问题


经常会遇到把普通callback形式的函数转换成Promise形式,一般情况下需要在原来函数上嵌套一层壳来实现,但是如果需要转换的函数比较多,这种方法就有些繁琐。毕竟给每个函数都做一层嵌套,要浪费很多行数。下面就来解决这个问题。


解决


先贴代码

/**
 * 转换类似dosomething(
 *      params-1,params-2,..,successHandler,errorHandler,params-n,...
 * ) 为promise形式
 * promisify(dosomething,[params-1,params-2,Promise,params-n,...]).then(...)
 * 其中 [Promise,params-1,params-2,...] 等价于 [params-1,params-2,...]
 * @param method
 * @param paramsv
 * @param scope
 * @returns {Promise}
 */
promisify(method,params,scope){
    let index = params.indexOf(Promise);
    if(index<0) {
        index = 0;
    }
    return new Promise((resolve,reject)=>{
        params.splice(index,1,resolve,reject)
        method.apply(scope,params)
    })
},


举个例子

  1. mgr.readFile(filePath,successCallback,errorCallback, isText)
    转换后
      promisify(readFile,[filePath,Promise,isText],mgr)
        .then(....)
        .catch(...)
    
  2. readFile(successCallback,errorCallback,filePath,isText)
    转换后
        promisify(readFile,[filePath,isText])
        .then(....)
        .catch(...)
        
    

你可能感兴趣的:(纯手工打造promisify函数,转换普通回调函数到Promise形式)