我有两个网络服务调用。Webservice1 返回 Promise[Option[Model]],Webservice2 应该将 Model 作为参数,然后返回一个 Promise[Option[String]]。这就是我构建代码的方式:
def call1: Promise[Option[Model]] = for {
response1 <- callService1(requestHolderForService1)
} yield {
for {
response <- response1
} yield ParserForResponse(response)
}
之后,我想将我的调用链接到服务 2,它将服务 1 的结果作为参数:
def call2:Promise[Option[String]] = call1.flatMap{
optionModel => optionModel.flatMap{
model => callService2(requestHolderForService2(model)).map{
service2Option => service2Option.map{
service2Result => ResultParse(service2Result)
}
}
}
}
问题是我的 call1 返回 aPromise[Option[Model]]
而 call2 的返回需要是Promise[Option[String]]
。问题源于中间服务调用
呼叫服务2
哪个返回Promise[Option[JsValue]]
,我无法弄清楚从Promise[Option[Model]] -> Promise[Option[JsValue]] -> Promise[Option[String]]
有人可以指出我如何能够使用 map 或 flatMap 将这两个调用链接在一起吗?
谢谢