Невозможно вернуть значение в функцию вызывающего scala - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь вызвать одну из служебных функций, но не могу вернуть значение вызывающей стороне, но каким-то образом я не могу вернуть ответ вызывающей стороне;т.е. основная функция.В чем может быть проблема?

Я попытался переназначить ответ на локальную переменную и вернуть его;но не сработало

// main function
def main(args: Array[String]): Unit = {
  val res = fetchFromDruid()
  // res comes as null here
}

def fetchFromDruid(): GroupByResponse {
  // creating an execution context

  // creating a local druid client

  // constructing a group by query

  // executing the query
  client(query).onComplete {
    //this will be executed if data is fetched successfully
    case Success(response) =>
      return response

    //this will be executed if there is an exception
    case Failure(ex) =>
      ex.printStackTrace()
      return null
  }
}

Ожидается: основной метод (вызывающий) должен получить ответ

Факт: вызывающий не получает ответ после возврата обратного вызова

1 Ответ

1 голос
/ 08 мая 2019

Рассмотрим следующее:

def f() :Unit = return 3

val x = f()  //x: Unit = ()

Вы не можете вернуть значение из метода, который не возвращает значение, что и пытается сделать ваш код.

Посмотрите на сигнатуру типа onComplete().

abstract def onComplete(f: (Try[T]) ⇒ U)(executor: ExecutionContext): Unit

onComplete() добавляет новый код в конец Future, выполняющегося в отдельном потоке. Код, в конце концов, будет выполнен, но onComplete() вернет вызывающей стороне Unit (без полезного значения), поэтому ваши операторы return не имеют смысла. (И плохой стиль Scala. Не используйте return. Это может ввести вас в заблуждение.)

...