首页 > 解决方案 > 蒸汽中的异步执行。如何控制in的循环

问题描述

func loadBy(_ req: Request) throws -> Future<[News]> {
    let parentId = try req.parameters.next(String.self)
    let parent = try self.findParentBy(req, parentId: parentId)
    var childNews: [News] = []

    let qq = parent.map(to: [News].self) { parentNews in
        for chilId in parentNews!.childIds {
            let ch = News.query(on: req).filter(\News.newsId == chilId).first().map(to: News?.self) { child in
                if let child = child {
                    childNews.append(child)
                }
                return child
            }
        }
        return childNews
    }

    return qq.flatMap(to: [News].self) { childNews in
        return childNews.map { news in
            Future.map(on: req) { news }
        }.flatten(on: req)
    }
}

在获取值之前返回

我想等到获得所需的值然后返回它们

标签: swiftvapor

解决方案


谢谢。它适用于

func loadBy(_ req: Request) throws -> Future<[News]> {
        let parentId = try req.parameters.next(String.self)
        let parent = try self.findParentBy(req, parentId: parentId)
        var childNews: [News] = []

        return parent.flatMap(to: [News].self) { parentNews in
            return parentNews!.childIds.map { (key) in
                return News.query(on: req).filter(\News.newsId == key).first().map(to: Void.self) { child in
                    if let child = child {
                        childNews.append(child)
                    }
                }
            }.flatten(on: req).map {
                return childNews
            }
        }
    }

func loadBy(_ req: Request) throws -> Future<[News]> {
        let parentId = try req.parameters.next(String.self)
        let parent = try self.findParentBy(req, parentId: parentId)
        return parent.flatMap(to: [News].self) { parentNews in
            return News.query(on: req).filter(\News.newsId ~~ parentNews!.childIds).all()
        }
    }

推荐阅读