docs: public static <V> PnkyPromise<V> composeAsync(final ThrowingSupplier<PnkyPromise<V>> operation,
        final Executor executor)
    {
      final Pnky<V> pnky = Pnky.create();
  
      executor.execute(new Runnable()
      {
        @Override
        public void run()
        {
          if (pnky.state.compareAndSet(WAITING, RUNNING))
          {
            try
            {
              operation.get().alwaysAccept(new ThrowingBiConsumer<V, Throwable>()
              {
                @Override
                public void accept(final V result, final Throwable error) throws Throwable
                {
                  if (error != null)
                  {
                    pnky.reject(error);
                  }
                  else
                  {
                    pnky.resolve(result);
                  }
                }
              });
            }
            catch (final Throwable e)
            {
              pnky.reject(e);
            }
          }
        }
      });
  
      return pnky;
    }