Как я могу получить аргумент асинхронного обратного вызова onResponse? - PullRequest
0 голосов
/ 28 марта 2019

Я внедряю клиент GraphQL в Java-приложение, используя автоматическую генерацию запросов Apollo, и до сих пор мне удавалось связывать вызовы, и я также получаю нужные данные.Проблема в том, что Apollo заставляет меня реализовать анонимный метод ApolloCall.Callback<>(), который переопределяет void onResponse(Response response) и void onFailure(), но я не могу найти способ получить этот объект Response, который я хочу собрать иубедитесь, что у меня есть.

Это проект Spring Boot на Java 11, я пытался использовать CompletableFuture, но с ограниченными знаниями о нем и о том, как использовать его для этой конкретной проблемы, мне не повезло.Я также пытался реализовать поддержку RxJava, которую должен иметь Apollo, но я не смог решить проблемы с зависимостями с помощью этого подхода.

Я почти уверен, что фьючерсы это решат, но опять же я не знаю, как.

  public void getOwnerIdFromClient() {
    client
        .query(getOwnerDbIdQuery)
        .enqueue(
            new ApolloCall.Callback<>() {
              @Override
              public void onResponse(@Nonnull Response<Optional<GetOwnerDbIdQuery.Data>> response) {
                int ownerId =
                    response
                        .data()
                        .get()
                        .entities()
                        .get()
                        .edges()
                        .get()
                        .get(0)
                        .node()
                        .get()
                        .ownerDbId()
                        .get();

                System.out.println("OwnerId = " + ownerId);
              }

              @Override
              public void onFailure(@Nonnull ApolloException e) {
                logger.error("Could not retrieve response from GetOwnerDbIdQuery.", e);
              }
            });
  }

Поскольку я хочу работать с этим int ownerId за пределами onResponseэто не достаточное решение.Я на самом деле хотел бы сделать этот вызов x количество раз и создать список всех идентификаторов, которые я на самом деле получил, так как это также может вернуть нулевой идентификатор, а это значит, что мне нужен какой-то способ дождаться их завершения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...