如何从scala Future中提取值

时间:2014-04-14 21:26:07

标签: scala map future rediscala

如何在Seq上执行缩小/折叠操作,然后获取最终值。

我正在执行返回Future的操作(在本例中为Redis调用)。我正在使用map操作处理Future(结果)。

map操作返回Future [Seq [Any]]类型。

res0: scala.concurrent.Future[Seq[Any]] = scala.concurrent.impl.Promise$DefaultPromise@269f8f79

现在我想在这个Seq上执行一些操作(fold / reduce),然后得到一个最终值。我怎样才能做到这一点?

  implicit val akkaSystem = akka.actor.ActorSystem()
  val redisClient = RedisClient()
  val sentimentZSetKey = "dummyzset"
  val currentTimeStamp = System.currentTimeMillis()
  val end = Limit(currentTimeStamp)
  val start = Limit(currentTimeStamp - 60 * 100000)
  val results = redisClient.zrangebyscoreWithscores(ZSetKey, start, end)
  implicit val formats = DefaultFormats
  import org.json4s._
  import org.json4s.native.JsonMethods._
  import org.json4s.DefaultFormats


  results.map {
    seq => seq.map {
      element => element match {

        case (byteString, value) => {
          val p = byteString.decodeString("UTF-8")
          try {
            val ph = parse(p).extract[MyClass]
            ph

          } catch {
            case e: Exception => println(e.getMessage)
          }
        }
        case _ =>
      }
    }
  } 

1 个答案:

答案 0 :(得分:2)

在Scala中使用期货时阻止为discouraged,但可以根据链接使用Await函数完成。由于您希望进一步转换序列,因此最好使用these examples中的功能组合。