我有一个嵌套的方法,在其中执行几个动作,并且我得到一些奇怪的行为。
这是方法:
def performAction(request: RequestModel): Future[ResponseModel] = {
// addToDb returns a Future[ObjectId]
myService1.addToDb(request.user, request.time) flatMap {
case objID: ObjectId =>
// doSomething returning ResponseModel
myService2.doSomething(request) map {
// SuccessModel is extending ResponseModel
case successData: SuccessModel =>
successData
// FailureModel is extending ResponseModel
case failureData: FailureModel =>
myService1.removeFromDb(objID)
failureData
}
case _ => throw new Exception("future failed")
}
}
在我的测试中,我对所有内部服务调用进行了模拟,以控制返回数据。
我想测试我得到FailureModel
奇怪的是,如果我尝试在myService2.doSomething
之前调试objId没问题,但如果我之后调试它,让我们说myService1.removeFromDb
objId将等于返回类型(FailureModel)。 ..为什么?
我可以在调试器objId = FailureModel(x,y,z)
现在我知道了,因为映射objId的映射是其他东西,但从未在调试器中看到它,这样做有意义吗?