这是函数,
def checkSupport(request: checkSupportRequest): Future[checkSupportResponse] = {
val lookupClient = Thrift.newIface[lookupClient[Future]](/*some initializers*/)
val req = lookupIPRequest(request.getIps, /*Unimportant variables*/)
var result = new checkSupportResponse()
lookupClient.performLookup(req).map { resp =>
// Returns a map of IP to Country Code (String:String)
val ip_cc_map = for {
(ip, lxn) <- resp.found
sr <- lxn.simpleResult
cc <- sr.countryCode
} yield (ip, cc)
// Returns a map of IP to Boolean (String:Boolean)
val not_found_map = for {
(ip) <- resp.notFound
} yield (ip, false)
val op_supp_temp_map = ip_cc_map.map {
case (ip, cc) => someLookup(cc) //This returns a boolean value
}
val op_supp_map = op_supp_temp_map.toList //List of Booleans
val ips_found = ip_cc_map.map { // Intended to become a list of IPs
case (ip, cc) => ip
}
val final_op_supp_map = ips_found zip op_supp_map // Converted to Map (String:Boolean)
final_map = final_op_supp_map ++ not_found_map
result.set_supported(final_result.toList.toMap.mapValues(Boolean.box))
}
Future.value(result)
}
performLookup是一个未来化的电话。如上所述做事是犹太教的,即接受未来电话的输出并映射它。执行两次背靠背以获得对其的理解以获得必要的地图,然后在相同的地方执行,将两个结果组合并返回相同的结果。出于某种原因,这会编译但是当我尝试对其进行单元测试时,看起来好像performLookup从未运行过。任何帮助将不胜感激。
此外,我正在我的单元测试中,在checkSupport()调用上执行Await.result()。
答案 0 :(得分:2)
我假设您Future.value(result)
实际上是Future.successful(result)
。
闭包内的result
变量与其外的result
变量不同,因此您永远不会实际修改您声明的result
变量在你的功能开始。所以这就是为什么看起来你的Future
从未跑过。
作为旁注,即使你改变了result
的状态,也不需要将其声明为var
,val
在这里很好({{只有通过执行var
)重新分配它才会有必要。
所以你可以像这样修改你的功能:
result = ...