在继续之前获取 [EventLoopF​​uture] 的所有值

nik*_*ers 2 future promise swift vapor swift-nio

我有一组值映射到多个承诺,每个承诺给我一个 EventLoopF​​uture。所以我最终得到了一个具有可变大小 [EventLoopF​​uture] 的方法,我需要所有响应都成功才能继续。如果其中一个或多个返回错误,我需要执行错误场景。

在继续成功路径或错误路径之前,如何等待整个 [EventLoopF​​uture] 完成?

Joh*_*iss 5

EventLoopFuture有一种reduce(into: ...)方法可以很好地用于该目的(以及您想要累积多个值的其他任务):

let futureOfStrings: EventLoopFuture<[String]> =
    EventLoopFuture<String>.reduce(into: Array<String>(),
                                   futures: myArrayFutureStrings,
                                   on: someEventLoop,
                                   { array, nextValue in array.append(nextValue) })   
Run Code Online (Sandbox Code Playgroud)

要专门[EventLoopFuture<Something>]变成EventLoopFuture<[Something]>你也可以使用较短的whenAllSucceed

let futureOfStrings: EventLoopFuture<[String]> =
    EventLoopFuture<String>.whenAllSucceed(myStringFutures, on: someEventLoop)
Run Code Online (Sandbox Code Playgroud)