code: @Override
      public IPromise<T> then(Runnable result) {
          if (realCallback instanceof IPromise == false)
              throw new RuntimeException("this is an error.");
          else
              return ((IPromise)realCallback).then(result);
      }
docs: Warning: this will not be called on error or timeout
  
  @param result
  @return