遍历 Vapor 中的数组并正确处理未来
Loop through an Array in Vapor and handle future correctly
我有一组遵循以下模型的客户:
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
}
}
}
}
我的问题是 returns 一个 Future Bool 函数,我不确定我应该如何处理 for 循环中的 future。
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
}
我收到一条错误消息,无法将 EventLoopFurture 分配给 Bool 类型。我尝试了几个选项,但总是回到从数据库中获取 Future 的相同问题。
您可以使用 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)
}
我有一组遵循以下模型的客户:
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
}
}
}
}
我的问题是 returns 一个 Future Bool 函数,我不确定我应该如何处理 for 循环中的 future。
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
}
我收到一条错误消息,无法将 EventLoopFurture 分配给 Bool 类型。我尝试了几个选项,但总是回到从数据库中获取 Future 的相同问题。
您可以使用 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)
}