Vapor: постобработка результата запроса? - PullRequest
1 голос
/ 16 марта 2020

Vapor / Future newb ie здесь, кто борется с системой типов.

Я бы хотел немного обработать результаты запроса: 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 }
                }
    }
}

Что приводит к: enter image description here

Итак, каков правильный шаблон для такого рода вещей?

Спасибо.

1 Ответ

2 голосов
/ 16 марта 2020

Использование 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)
    }
}
...