蒸气:在所有修改完成之前返回路线 [英] Vapor: route return before all modification done

查看:58
本文介绍了蒸气:在所有修改完成之前返回路线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下路线:

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,它不会成为响应的一部分.我能做些什么?在某些情况下,我不需要推迟返回".我该如何解决计划问题?

Unfortunatelly event.testPrices = testP is not applied, it will e not part of the response. What can I do? At some cases I do not need to postpone "return". How can I dissolve scheduling issue?

推荐答案

我也对Release进行了~~操作,就像之前的Release一样.

I do a ~~ operation on TestPrice also as for Release before.

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
        }
    }
}

这篇关于蒸气:在所有修改完成之前返回路线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆