在继续之前获取 [EventLoopFuture] 的所有值
Getting all values for [EventLoopFuture] before proceeding
我有一组值映射到多个承诺,每个承诺都给我一个 EventLoopFuture。所以我最终得到了一个具有可变大小 [EventLoopFuture] 的方法,并且我需要所有响应都成功才能继续。如果其中一个或多个returns出错,我需要执行错误场景。
如何等待整个 [EventLoopFuture] 完成,然后再继续成功路径或错误路径?
像这样
flatten
可以等待数组中的所有期货
[future1, future2, future3, future4].flatten(on: eventLoop)
对于 flatten
每个未来应该 return Void
而 flatten
本身将 return EventLoopFuture<Void>
有时我们需要处理一些具有简单值的数组,并使用 returns EventLoopFuture
的某种方法对每个值做一些事情,在这种情况下,代码可能如下所示
let array = ["New York", "Los Angeles", "Las Vegas"]
array.map { city in
someOtherMethod(city).transform(to: ())
}.flatten(on: eventLoop)
在上面的示例中,方法 someOtherMethod
可以 return 未来使用任何东西,但我们可以将其转换为 EventLoopFuture<Void>
以与 flatten
一起使用
EventLoopFuture
有一个 reduce(into: ...)
方法可以很好地用于该目的(以及您想要累积多个值的其他任务):
let futureOfStrings: EventLoopFuture<[String]> =
EventLoopFuture<String>.reduce(into: Array<String>(),
futures: myArrayFutureStrings,
on: someEventLoop,
{ array, nextValue in array.append(nextValue) })
要专门将 [EventLoopFuture<Something>]
变成 EventLoopFuture<[Something]>
,您还可以使用较短的 whenAllSucceed
let futureOfStrings: EventLoopFuture<[String]> =
EventLoopFuture<String>.whenAllSucceed(myStringFutures, on: someEventLoop)
我有一组值映射到多个承诺,每个承诺都给我一个 EventLoopFuture。所以我最终得到了一个具有可变大小 [EventLoopFuture] 的方法,并且我需要所有响应都成功才能继续。如果其中一个或多个returns出错,我需要执行错误场景。
如何等待整个 [EventLoopFuture] 完成,然后再继续成功路径或错误路径?
像这样
flatten
可以等待数组中的所有期货
[future1, future2, future3, future4].flatten(on: eventLoop)
对于 flatten
每个未来应该 return Void
而 flatten
本身将 return EventLoopFuture<Void>
有时我们需要处理一些具有简单值的数组,并使用 returns EventLoopFuture
的某种方法对每个值做一些事情,在这种情况下,代码可能如下所示
let array = ["New York", "Los Angeles", "Las Vegas"]
array.map { city in
someOtherMethod(city).transform(to: ())
}.flatten(on: eventLoop)
在上面的示例中,方法 someOtherMethod
可以 return 未来使用任何东西,但我们可以将其转换为 EventLoopFuture<Void>
以与 flatten
EventLoopFuture
有一个 reduce(into: ...)
方法可以很好地用于该目的(以及您想要累积多个值的其他任务):
let futureOfStrings: EventLoopFuture<[String]> =
EventLoopFuture<String>.reduce(into: Array<String>(),
futures: myArrayFutureStrings,
on: someEventLoop,
{ array, nextValue in array.append(nextValue) })
要专门将 [EventLoopFuture<Something>]
变成 EventLoopFuture<[Something]>
,您还可以使用较短的 whenAllSucceed
let futureOfStrings: EventLoopFuture<[String]> =
EventLoopFuture<String>.whenAllSucceed(myStringFutures, on: someEventLoop)