La question est de savoir exactement ce que vous voulez dire par "ne pas jeter une erreur".
la séquence d'événements sur un Signal
/SignalProducer
a une precisely defined semantic
Theres un nombre arbitraire de Value
(de 0 - x) Événements, suivie, éventuellement, par un completed
, failed
ou interrupted
événement. Après cela, il n'y a plus d'événements.
En général, on peut dire que la plupart opérateurs ne fonctionnent que sur value
événements et se propagent immédiatement failed
événements (sans faire fonctionner sur eux). Si vous n'êtes pas sûr d'un opérateur spécifique, jetez un œil à la documentation de cet opérateur qui est très claire sur le comportement des événements d'échec.
donc une façon de comprendre la question est de dire quand producerA
se termine correctement (après un nombre arbitraire de value
Events), puis lancez producerB
et si producerA
envoie un failed
événement, de ne pas.
Dans ce cas, l'opérateur then
correspond exactement à ce dont vous avez besoin. Il commencera producerB
dès que producerA
se termine, mais pas si producerA
échoue!
producerA.then(producerB)
.start(Signal.Observer(value: { value in
print("Value \(value)")
}, failed: {error in
print("Error \(error)")
}))
Notez que vous DonT veulent utiliser le flatMapError
ici parce que cela (en fonction de la façon dont votre erreur de manipulation dans le bloc semble) convertir failed
événements value
Les événements qui déclencheraient producerB
par la suite.
Une autre façon de comprendre la question est de dire chaque événement sur producerA
qui n'est pas une erreur devrait déclencher producerB
une fois
Dans ce cas, vous devez utiliser flatMap
sur les événements de producerA
revenir un producerB
pour chaque événement sur producerA
.Notez ici, encore une fois, un événement flatMap
failed
se propage immédiatement, si un événement failed
sur producerA
provoquera l'ensemble de la chaîne à l'échec sans exécution de producerB
producerA.flatMap(.concat) { _ in return producerB }
.start(Signal.Observer(value: { value in
print("Value \(value)")
}, failed: {error in
print("Error \(error)")
}))
Carte/flatMap retourne un tableau. Que voulez-vous dire si cela renvoie une erreur? – user1046037