首页 > 解决方案 > Vapor:对查询结果进行后处理?

问题描述

Vapor/Future 新手,正在与类型系统作斗争。

我想对查询结果做一些处理:

  1. 做查询。
  2. 更改/保存结果。
  3. 返回更改的结果。

例如:

func myIndex(_ req: Request) throws -> Future<[Todo]> {
    return Todo.query(on: req)
            .all()
            .flatMap { allToDos in
                allToDos.flatMap { toDo in
                    // change toDoch
                    return toDo.save(on: req).flatMap { $0 }
                }
    }
}

结果是: 在此处输入图像描述

那么这种事情的正确模式是什么?

标签: iosfuturevapor

解决方案


利用flatten

func changeAllTodos(_ req: Request) throws -> Future<HTTPStatus> {
    return Todo.query(on: req).all().flatMap { allToDos in
        return allToDos.map { toDo in
            // change toDoch
            return toDo.save(on: req).transform(to: ())
        }.flatten(on: req).transform(to: .ok)
    }
}

推荐阅读