【问题标题】:why does this error message appear, cannot convert value of type 'User.Type' to closure result type 'EventLoopFuture<_>'?为什么会出现此错误消息,无法将类型“User.Type”的值转换为关闭结果类型“EventLoopF​​uture<_>”?
【发布时间】:2021-11-21 07:20:23
【问题描述】:

当我构建我的项目时,出现了这两个错误:

闭包参数列表的上下文类型需要 1 个参数,其中 不能被隐式忽略 .flatMap { User.self }

无法将“User.Type”类型的值转换为闭包结果类型 'EventLoopF​​uture<_>' .flatMap { User.self }

这是我的代码:

    import Fluent
    import Vapor
    
    struct PostController: RouteCollection {
        func boot(routes: RoutesBuilder) throws {
            let posts = routes.grouped("posts")
            posts.get(use: index)
            posts.post(use: create)
            posts.group(":postsID") { posts in
                posts.delete(use: delete)
            }
        }

    func index(req: Request) throws -> EventLoopFuture<[Post]> {
        return Post.query(on: req.db).all()
      

    }


    func create(req: Request) throws -> EventLoopFuture<Post> {
        let post = try req.content.decode(Post.self)
        //return post.save(on: req.db).map { post }
        return User.query(on: req.db).filter(\.$id == post.user_id).first()
                .unwrap(or: Abort(.notFound))
                .flatMap { User.self }
                .$posts.create(post, on: req.db)
    }
    

    func delete(req: Request) throws -> EventLoopFuture<HTTPStatus> {
        return Post.find(req.parameters.get("postsID"), on: req.db)
            .unwrap(or: Abort(.notFound))
            .flatMap { $0.delete(on: req.db) }
            .transform(to: .ok)
    }

}

【问题讨论】:

  • 您能否编辑您的问题以包含用户的模型定义?另外,您能否在创建路线中添加对您要实现的目标的解释。

标签: swift vapor


【解决方案1】:

我认为您误解了EventLoopFuture 上的flatMap 方法。

尝试类似:

func create(req: Request) throws -> EventLoopFuture<Post> {
    let post = try req.content.decode(Post.self)
    return User.query(on: req.db)
        .filter(\.$id == post.user_id)
        .first()
        .unwrap(or: Abort(.notFound))
        .flatMap { user in
            return post.create(on: req.db)
        }
        .transform(to: post)
}

https://docs.vapor.codes/4.0/async/#flatmap

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多