docs: function (callback, errback) {
              var promise = new Promise(),
                  self = this;
  
              function _errback(e) {
                  if (isFunction(errback)) {
                      try {
                          var res = spreadArgs(errback, [e]);
                          isPromiseLike(res) ? res.then(promise.callback, promise.errback) : promise.callback(res);
                      } catch (e) {
                          promise.errback(e);
                      }
                  } else {
                      promise.errback(e);
                  }
              }
  
              function _callback() {
                  try {
                      var res = isFunction(callback) ? spreadArgs(callback, arguments) : callback;
                      if (isPromiseLike(res)) {
                          res.then(promise.callback, _errback);
                      } else {
                          promise.callback(res);
                          promise = null;
                      }
                      callback = res = null;
                  } catch (e) {
                      _errback(e);
                  }
              }
  
              self.addCallback(_callback);
              self.addErrback(_errback);
              return promise.promise();
          }