Vapor:在所有修改完成之前返回路由
Posted
技术标签:
【中文标题】Vapor:在所有修改完成之前返回路由【英文标题】:Vapor: route return before all modification done 【发布时间】:2019-12-24 19:15:01 【问题描述】:我有以下路线:
router.post([Page].self, at: "/fetchStatusOfManagedReleases") (req, pages) -> Future<[Page]> in
let eventIds = pages.map $0.events .flatMap $0 .map $0.id
return Release.query(on: req).filter(\.fbId ~~ eventIds).all().map releases in
var result: [Page] = []
for p in pages
let page = p
var pageEvents: [Event] = []
for e in p.events
let event = e
if let release = releases.first(where: $0.fbId == e.id )
event.inProgress = release.inProgress
event.purpose = release.purpose
_ = try release.testPrices.query(on:req).all().map testP in
event.testPrices = testP // <--- this line is not applied
else
event.inProgress = false
pageEvents.append(event)
page.events = pageEvents
result.append(page)
return result
不幸的是,event.testPrices = testP
没有被应用,它不会成为响应的一部分。我能做些什么?在某些情况下,我不需要推迟“返回”。如何解决调度问题?
【问题讨论】:
你必须使用flatten
数组有flatten
,但我不能在这个上使用flatten
:_ = try release.testPrices.query(on:req).all().map
【参考方案1】:
我对@987654322@ 进行了~~
操作,之前也对Release
进行了操作。
router.post([Page].self, at: "/fetchStatusOfManagedReleases") (req, pages) -> Future<[Page]> in
let eventIds = pages.map $0.events .flatMap $0 .map $0.id
return Release.query(on: req).filter(\.fbId ~~ eventIds).all().flatMap releases in
let releaseInnerIds = releases.map $0.id
return TestPrice.query(on: req).filter(\.id ~~ releaseInnerIds).all().map testPrices in
var result: [Page] = []
for p in pages
let page = p
var pageEvents: [Event] = []
for e in p.events
let event = e
if let release = releases.first(where: $0.fbId == e.id )
event.inProgress = release.inProgress
event.purpose = release.purpose
event.testPrices = testPrices.compactMap(testPrice in
if testPrice.release.parentID == release.id
return testPrice
else
return nil
)
else
event.inProgress = false
pageEvents.append(event)
page.events = pageEvents
result.append(page)
return result
【讨论】:
工作很好!当我在我的一个项目中有如此相似的工作时,仍然无法理解为什么我的解决方案对您不起作用。我想知道这是否归结为时机? 是的,我觉得是时候了,release.testPrices.query
会在一个epoch之后执行。以上是关于Vapor:在所有修改完成之前返回路由的主要内容,如果未能解决你的问题,请参考以下文章
Swift Vapor 服务器:如何在获取请求中返回嵌套字典?