的问题是,究竟是什么,你的意思是用“不抛出一个错误”。
事件上的Signal
/SignalProducer
该序列具有precisely defined semantic
即使世界的Value
(从0 - x)的任意数量的活动,然后,最终,由completed
,failed
或interrupted
事件。之后,没有更多的事件。
一般来说,你可以说,最运营商只对value
事件进行操作,并立即传播failed
事件(而不对其进行操作)。如果你不知道在特定运营商,看看该运营商是关于失败事件的行为非常清晰的文档。
因此,要理解这个问题的方法之一是说当producerA
成功完成(的value
活动的任意号码后),然后开始producerB
如果producerA
发送failed
事件,那就不要。
在这种情况下,运营商then
正是你所需要的。它将立即开始producerB
为producerA
完成,但不如果producerA
失败!
producerA.then(producerB)
.start(Signal.Observer(value: { value in
print("Value \(value)")
}, failed: {error in
print("Error \(error)")
}))
注意,你不要使用的flatMapError
这里,因为这会(根据您的错误块处理的外观)转换failed
事件value
事件将触发producerB
最终。
另一种方式来理解这个问题是说是在producerA
每个事件不是错误应触发producerB
一次
在这种情况下,你会使用flatMap
上的producerA
事件返回一个producerB
对producerA
每个事件。这里注意,再次flatMap
立即传播的failed
事件,所以failed
事件上producerA
将导致整个链条失败没有执行producerB
producerA.flatMap(.concat) { _ in return producerB }
.start(Signal.Observer(value: { value in
print("Value \(value)")
}, failed: {error in
print("Error \(error)")
}))
地图/ flatMap返回数组。如果它返回错误,你的意思是什么? – user1046037