Vapor:Post 处理查询结果?

Vapor: Post processing on a query result?

Vapor/Future菜鸟来了,跟类型系统打架

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

  1. 进行查询。
  2. Change/save 个结果。
  3. Return 改变了结果。

例如:

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 { [=11=] }
                }
    }
}

结果是:

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

使用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)
    }
}