2017-09-28 1 views
3

Je veux diviser Observable en deux courants de Observable en cas d'erreurRxjs gérer l'erreur dans la canalisation séparée et fusion

opérateur catch peut convertir erreur en cours de validité en renvoyant une erreur observable ou propager soit par throw ment ou retour Observable.throw

opérateur partition ne traite que des valeurs valides, aucune erreur passent par ce

ce que je dois est divisé en deux Observable un s Observable processus d alors différemment et les fusionner comme on le voit dans schéma ci-dessous

enter image description here

Répondre

1

Motif comme cela pourrait s'adapter à votre cas d'utilisation

step1 
 
    .map((data)=>{data:data}) 
 
    .catch(()=>Observable.of({error:'error'}) 
 
    .flatMap((res)=>{ 
 
    //process A and B should return observable 
 
    if(res.data) return processA(res) 
 
    return processB(res) 
 
    }) 
 
    .map(res=>{ 
 
    //do your merged processing here 
 
    }) 
 
    .subscribe()

+0

il ne fonctionnera pas, car après la première Le flux 'error'' step1' n'émettra aucune autre valeur. Une autre chose plus petite est 'if (res.data) return processA (res)' –

+0

Observable.of in catch aurait dû convertir l'erreur en élément observable normal, donc il émettra toujours. S'il vous plaît voir cet exemple https://jsfiddle.net/c8hLezf4/ –

+1

Vous avez techniquement ** pas ** jeter dans votre jsfiddle et attraper n'a pas été frappé - voir ici: https://jsfiddle.net/c8hLezf4/3/. Si vous avez lancé, le reste du tableau ne sera pas émis car il serait contre une interface observable. –