【发布时间】:2015-03-10 08:37:19
【问题描述】:
我正在使用 scala 的 Dispatch 库从 API 获取数据。
在 main 中,我有一个函数 getSensorList(),它返回附加到设备 ID 的传感器列表。
Dispatch 使用 Futures 做一个请求Dispatch library
我如何将未来返回主?
我按照这篇文章来实现我所拥有的:Accessing value returned by scala futures
import dispatch._, Defaults._
import scala.util.{Success, Failure}
import scala.concurrent.duration._
def getSensorList(uuid:String) = Future[String] {
val svc = url("https://example_api.com/services/api/v1/sensors/" + uuid + "/")
val response : Future[String] = Http(svc OK as.String)
}
object DispatchTestFunction{
def main (args: Array[String]) {
val result = getSensorList("example_device_ID)
result onComplete {
case Success(content) => {
println("Successful response" + content)
}
case Failure(t) => {
println("An error has occurred: " + t.getMessage)
}
}
}
}
感谢您的帮助。
API 返回 JSON 类型的数据,因此 result 应该是 JSON 类型吗?
我的代码错误是Type mismatch, expected string: actual is unit
我将 future 的返回类型定义为字符串,但编译器查看函数的最后一行并认为它应该是 unit 类型 - 即它返回 notting?
谢谢
import dispatch._, Defaults._
import scala.util.{Success, Failure}
def getSensorList(uuid:String) = Future[String] {
val svc = url("https://example_api.com/services/api/v1/sensors/" + uuid + "/")
val response : Future[String] = Http(svc OK as.String)
}
object DispatchTestFunction{
def main (args: Array[String]) {
val result = getSensorList("example_device_ID")
result onComplete {
case Success(content) => {
println("Successful response" + content)
}
case Failure(t) => {
println("An error has occurred: " + t.getMessage)
}
}
}
}
【问题讨论】:
-
(如果您发布代码以检查存在类型推断的语言,请至少将推断的类型添加到问题的部分,在这种情况下为
result。)你如何想要在main中获得Future?对我来说,你似乎已经拥有它了。不确定你想达到什么目标。你想Await结果吗?还是map? -
感谢您对 Gabor 的帮助。 API 返回 JSON 数据,因此
result应该是 JSON 类型吗?这在 Scala 中是否存在。 -
这取决于 lib 调度程序使用。我猜结果类型类似于
val result: Future[/*List[*/JValue/*]*/] = ...。 IDE 或 REPL 可以判断。对于 akka/ScalaFuture,您可以通过Await获得结果(docs.scala-lang.org/overviews/core/futures.html#blocking),如果您希望将其保存在Future中,只需将map和result保存在其他位置即可。