【问题标题】:Combining/chaining futures in scala play framework async action在scala play框架异步操作中组合/链接期货
【发布时间】:2018-06-04 13:56:16
【问题描述】:

我是一个尝试使用 play 框架编写 Rest Api 的 scala 新手。我有以下3种数据访问方式

getDataDict: (dsType:String, name:String) => Future[Option[DatasetDictionary]]
getDatasetData: (DatasetDictionary) => Future[List[DatasetData]]
getMetadata: (DatasetDictionary) => Future[List[Metadata]]

我需要使用这 3 个方法来获取我的异步操作方法的结果。

 def index(dstype:String, name:String, metadata:Option[Boolean]) = Action.async{   
  /*
     1. val result = getDataDict(type, name)
     2. If result is Some(d) call getDatasetData
     3.1 if metadata = Some(true)
          call getMetadata function
          return Ok((dict, result, metadata))
     3.2 if metadata is None or Some(false)
          return Ok(result)
     4. If result is None
               return BadRequest("Dataset not found")
 */  
}

我的步骤 1 和 2 工作如下

def index1(dsType:String, dsName: String, metadata:Option[Boolean]) = Action.async {
    getDataDict(dsType, dsName) flatMap {
        case Some(x) => getDatasetData(x) map (x => Ok(Json.toJson(x)))
        case None => Future.successful(BadRequest("Dataset not found"))
      }
}

我不知道如何让元数据部分正常工作。

【问题讨论】:

  • 要么使用.flatMap继续,要么用于理解

标签: scala playframework playframework-2.0 future


【解决方案1】:

首先,不是很清楚 (d, result, x) 你真正想要返回什么。希望我猜对了:

 def index(dstype:String, name:String, metadata:Option[Boolean]) = Action.async {
    getDataDict(dstype, name) flatMap {
      case Some(datasetDictionary) =>
        getDatasetData(datasetDictionary) flatMap { datasetDataList =>
          if (metadata == Some(true)) {
            getMetadata(datasetDictionary) map { metadataList =>
              Ok(Json.toJson((datasetDictionary, datasetDataList, metadataList)))
            }
          } else {
            Future.successful(Ok(Json.toJson(datasetDataList)))
          }
        }
      case None => Future.successful(BadRequest("Dataset not found"))
    }
  }

【讨论】:

    猜你喜欢
    • 2019-04-11
    • 2020-05-01
    • 2013-11-02
    • 2018-06-15
    • 2012-10-17
    • 2016-05-02
    • 2022-12-18
    • 2022-01-22
    相关资源
    最近更新 更多