【发布时间】:2020-03-07 22:09:40
【问题描述】:
是否有一个 Combine 运算符可以按顺序运行一系列期货,在开始下一个之前运行每个期货?
我可以用非常凌乱的方式做到这一点:
f1
.flatMap { _ in
f2
}.flatMap { _ in
f3
}.flatMap { _ in
// ...
}
但我更喜欢这样的:
sequence(f1, f2, f3, ...)
在某些框架中,这看起来像:
f1.then { f2 }.then { f3 }
【问题讨论】:
-
它解释了“then”的含义。如果您不想将值从一个未来提供给下一个,并且类型可比较,则可以使用
append。否则是的,flatMap或switchToLatest是如何序列化的。我不明白为什么这是个问题。 -
@matt 我查看了
append,但它向发布者添加了新元素,而不是附加新发布者。switchToLatest将交织事件,所以我认为flatMap是我最好的选择。 -
它不会向发布者添加“新元素”,它让一个发布者运行,然后在完成后让另一个发布者运行。所以他们确实是完全按顺序发布的。
-
可能与stackoverflow.com/questions/59743938/… 重复;那里有很多有趣的答案。
-
这才是真正的
append。其他的只是方便。
标签: ios macos foundation combine