code: @Override
      public CompletableFuture<T> getNext() {
          // Verify no other call to getNext() is currently executing.
          return getNextBucket()
                  .thenCompose(bucket -> {
                      if (bucket == null) {
                          // We are done.
                          return CompletableFuture.completedFuture(null);
                      } else {
                          // Convert the TableBucket into the desired result.
                          return this.resultConverter.apply(bucket);
                      }
                  });
      }
docs: region AsyncIterator Implementation