Асинхронное исполнение в паре.Как контролировать цикл для в - PullRequest
1 голос
/ 23 марта 2019
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)
    }
}

возвращается до получения значений

Я хотел бы дождаться получения желаемых значений и затем вернуть их

1 Ответ

1 голос
/ 23 марта 2019

Спасибо.Это работает с

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()
        }
    }
...