如何获得未来的结果而不使用" await"

时间:2017-01-24 08:56:51

标签: scala asynchronous future specs2

我希望在没有阻止操作的情况下获得Future的结果。 如果我用"等待"编写我的代码,它可以工作,但它对我不好,因为它阻塞了:

val t: Future[MatchResult[Personne]] = db.getPersonne(userId).map(_.get must beEqualTo(personne))
t.await

我尝试使用map更改我的代码:

 val r: Future[MatchResult[Personne]] = db.getPersonne(userId).map(_.get must beEqualTo(personne))
   r.map {
     case r@isWhatIExpected => r
     case isNot => isNot
   }

但我有这个错误:

  

发现:   scala.concurrent.Future [org.specs2.matcher.MatchResult [Personne]]
      [error] required:org.specs2.specification.create.InterpolatedFragment

2 个答案:

答案 0 :(得分:2)

使用Specs2,可以使用帮助程序来测试异步函数。

import org.specs2.concurrent.{ExecutionEnv => EE}

"Foo" in { implicit ee: EE => // take care of ee
  myAsyncFunWithFuture must beEqualTo(expectedVal).await(timeToWait)
}

答案 1 :(得分:0)

@ user4650183我想我当时不明白你的问题。在使用它之前,某个地方必须等待或阻止(如果您愿意)结果。