在scala播放框架异步操作中组合/链接未来
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在scala播放框架异步操作中组合/链接未来相关的知识,希望对你有一定的参考价值。
我是一个scala新手试图使用play框架编写Rest Api。我有以下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"))
}
}
我坚持如何让元数据部分工作。
答案
首先,你真正想要回归的不是很清楚(d,结果,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"))
}
}
以上是关于在scala播放框架异步操作中组合/链接未来的主要内容,如果未能解决你的问题,请参考以下文章