docs: function (callback) {
              var promise = new Promise();
              this.addCallback(function () {
                  try {
                      when(isFunction(callback) ? callback.apply(this, arguments) : callback).then(promise);
                  } catch (e) {
                      promise.errback(e);
                  }
              });
  
              this.addErrback(function () {
                  try {
                      when(isFunction(callback) ? callback.apply(this, arguments) : callback).then(promise);
                  } catch (e) {
                      promise.errback(e);
                  }
              });
              return promise.promise();
          }