问题描述
extension Post {
func beforeEncode() throws {
print("1")
}
}
当我的路线返回Post
或EventLoopFuture<Post>
时,此方法可以正常工作。 1
被打印到控制台。返回EventLoopFuture<Page<Post>>
时它不起作用,因此永远不会打印1
。
我认为这是因为页面的帖子从未得到编码,而是页面本身,所以我扩展了Page
:
extension Page where T: Content {
mutating func beforeEncode() throws {
print("2")
self = try self.map { (item: T) throws -> T in
var item: T = item
try item.beforeEncode()
return item
}
}
}
这也不会执行,但是在调用以下路由时,beforeEncode
的默认实现会执行:
app.get("route") { (request: Request) -> EventLoopFuture<Page<Post>> in
return Post.query(on: request.db).paginate(for: request)
}
1
和2
均未打印到控制台。
我该如何做才能在页面的每个帖子上执行beforeEncode
方法?
为什么调用beforeEncode
的默认实现而不是我自己的Page
扩展名添加的默认实现?
(我知道我可以映射EventLoopFuture
并在页面的每个项目上手动调用beforeEncode
,但这不是我想要的)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)