我正在尝试调用一个实用程序函数,但无法将值返回给调用方,但是以某种方式我无法将响应返回给调用方;即主要功能。可能是什么问题?
我尝试将响应重新分配给局部变量,然后将其返回;但没有用
// 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
}
}
预期:主方法(调用方)应获得响应
实际:回调返回后,呼叫者未获得响应
答案 0 :(得分:1)
请考虑以下内容:
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
。它会误导您。)