美文网首页
纯手工打造promisify函数,转换普通回调函数到Promis

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

作者: TOPro | 来源:发表于2018-03-22 09:43 被阅读111次

    问题


    经常会遇到把普通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<any>}
     */
    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函数,转换普通回调函数到Promis

          本文链接:https://www.haomeiwen.com/subject/ncboqftx.html