我已经尝试过映射、平面映射、创建EventLoopFuture
ofPost
等...我试图返回两个db.queries
创建要在 上呈现的单独内容数组req.view.render
,这将返回一个EventLoopFuture<View>
.
我的错误是:Cannot convert value of type 'EventLoopFuture<[Posts]>' to expected argument type '[Posts]'.
这是路由器调用的我的代码:
func blogView(req: Request) throws -> EventLoopFuture<View> {
struct PageContext: Encodable {
var posts: [Posts]
var categories: [Categories]
var title: String
}
struct Posts: Encodable {
var posts: BlogPostModel.ViewContext
var category: BlogCategoryModel.ViewContext
}
struct Categories: Encodable {
var categoryList: BlogCategoryModel.ViewContext
}
let posts = BlogPostModel.query(on: req.db)
.sort(\.$date, .descending)
.with(\.$category)
.all()
.mapEach {Posts(posts: $0.viewContext, category: $0.category.viewContext)}
let categories = BlogCategoryModel.query(on: req.db)
.sort(\.$title)
.all()
.mapEach {Categories(categoryList: $0.viewContext)}
let returnContext = PageContext(posts: posts,categories: categories, title: categories)
return req.view.render("Blog/Frontend/Blog", returnContext)
}
编辑:在下面重新发表我的评论。此代码段返回帖子(和关联的类别)。试图增加一秒钟db.query
的回报。
func blogView(req: Request) throws -> EventLoopFuture<View> {
struct Context: Encodable {
struct PostWithCategory: Encodable {
var category: BlogCategoryModel.ViewContext
var post: BlogPostModel.ViewContext }
let title: String
let items: [PostWithCategory]
}
return BlogPostModel.query(on: req.db)
.sort(\.$date, .descending)
.with(\.$category)
.all()
.mapEach {
Context.PostWithCategory(category: $0.category.viewContext, post: $0.viewContext)
}
.flatMap {
let context = Context(title: "Blog Posts", items: $0)
return req.view.render("Blog/Frontend/Blog", context)
}
}