code: function(func, ...params){
      return new Promise((resolve, reject)=>{
        params.push(function(){
          if(arguments[0] instanceof Error){
            reject(arguments[0])
          }else{
            resolve(arguments.length == 1 ? arguments[0] : arguments[1])
          }
        })
        func.apply(null, params)
      })
    }
docs: /*Execute a callback-based async function as a promise and have the return value
  resolved as a promise output passed to the .then() method.
  Uses same approach for resolving final value as 'create'.
  While 'create' returns a function that can be stored and used repeatedly;
  'complete' executes the async method as a promise once and is not reusable.
  
  'complete' also limits the callback arguments you can resolve to the first
  or second argument, following the standard Node.js API pattern of (err, data)
  as the assumed callback structure.  This means if arguments.length > 1, the second
  argument value will be resolved, while arguments.length == 1 will resolve the lone
  argument value, even if it is a null error value, as is the case in some Node.js
  callbacks.