我在play framework 2.2上开发应用程序我有一个像这样的路由文件:
GET /posting/ controllers.posting.BlogController.allPosts()
GET /posting/:number controllers.posting.BlogController.allPosts(number: Int)
Run Code Online (Sandbox Code Playgroud)
和BlogContriller:
object BlogController extends Controller {
def allPosts(pageNumber:Int = 1, postsPerPage:Int = 10) = Action{
val posts = Post.getLastNPosts(postsPerPage, postsPerPage*(pageNumber-1))
val htmlPosts = new Html(new StringBuilder());
for (post <- posts){
val htmlPost = views.html.posting.post(post.getName, post.getText, post.getDate.toString)
htmlPosts += htmlPost;
}
Ok(views.html.posting.index(htmlPosts))
}
}
Run Code Online (Sandbox Code Playgroud)
当我试图加入时,我给出了一个错误:
Error:(14, -1) Play 2 Compiler: C:\...\conf\routes:14: Compilation error[Using different overloaded methods is not allowed. If you are using a single method in combination with default parameters, …
Run Code Online (Sandbox Code Playgroud) 所以,我有一个对象,有方法,类似的东西:
object Connector {
def createObject (id : Long, x : Double, y : Double, name : String, objtype : Int, layer : String) : String = {
//some code
}
def deleteObject (id : Long) : String = {
//some code
}
def findObject (name : String) : String = {
//some code
}
//some other methods
}
Run Code Online (Sandbox Code Playgroud)
例如,我想在所有方法中处理错误,使用相同的代码:
var res = domethod(methodParams)
if (res.indexOf("Error") > 0){
doSomeOtherMethod() //that can fix error
res = domethod(methodParams) //with same params
} …
Run Code Online (Sandbox Code Playgroud) Slick 3通过使用flatMap方法提供DBIOAction组成。另外,我们可以在两个DBIOAction之间的后端进行一些计算。在大多数情况下,这很好用,但是当计算结果在诸如Future之类的monad中时,我该怎么办?有阻止方式的代码:
val fooQuery = TableQuery[FooTable]
val barQuery = TableQuery[BarTable]
def requestService(content: Iterable[String]): Future[Iterable[Long]] = ???
def modify(ids: Iterable[Long], change: String) = {
val query = fooQuery.filter(_.id inSet ids).result.flatMap{ fooSeq =>
val content = fooSeq.map(_.contentField)
val requestServiceFuture = requestService(content)
val serviceResult = Await.result(requestServiceFuture, 1.minute)
barQuery.filter(_.id inSet serviceResult).delete //or other action
}
db.run(query.transactionally)
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有等待的情况下异步执行此代码?