我希望在没有阻止操作的情况下获得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
答案 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我想我当时不明白你的问题。在使用它之前,某个地方必须等待或阻止(如果您愿意)结果。