1

我有一系列遵循以下模型的客户:

struct GuestListPeople: Codable {
    var fName: String
    var lName: String
    var dob: Date
    var waiver: Bool
} 

每次使用 Mongokitten 检查 MongoDB 集合时,我都想遍历数组,以查看是否签署了弃权协议,然后根据需要将 bool 更新为 true 或 false。我创建了这个函数来检查豁免状态。

func checkGuestListWaiver(req: Request, col: Collection, firstName: String, lastName: String, dob: Date, orgId: String)throws->Future<Bool>{
        col.findOne(["firstName":firstName, "lastName":lastName, "dob": dob ,"orgId":orgId, "waiver":true]).flatMap{ custDoc in
            if let cd = custDoc {
                //found one so waiver must be true
                return req.future().map{
                    return true
                }
            }else {
                //not found return false. 
                return req.future().map{
                    return false
                }
            }
        }
    }

我的问题是函数返回一个 Future Bool,我不确定我应该如何在 for 循环中处理未来。

 for var c in guestList {
     let w = try CustomerController().checkGuestListWaiver(req: req, col: customerCol, firstName: c.fName, lastName: c.lName, dob: c.dob, orgId: b.orgId)
     c.waiver = w 
 }

我收到一个错误,无法将 EventLoopF​​urture 分配给 Bool 类型。我尝试了一些选项,但总是回到从数据库中获取 Future 的相同问题。

4

1 回答 1

2

您可以使用 flatten 进行迭代

func processGuestList(_ guestList: [Guest], on req: Request) throws -> Future<[Guest]> {
    var newList: [Guest] = []
    return try guestList.map { guest in
         return try CustomerController().checkGuestListWaiver(req: req, col: customerCol, firstName: c.fName, lastName: c.lName, dob: c.dob, orgId: b.orgId).map { w in
            var newGuest = guest
            newGuest.waiver = w
            newList.append(newGuest)
        }
    }.flatten(on: req).transform(to: newList)
}
于 2020-06-23T11:56:00.580 回答