2017-01-03 1 views
0

Как исправить только разрешенные обещания с помощью оператора mergeAll.Как испустить только разрешенное значение с помощью Rxjs 5 mergeAll operator

var s1 = Rx.Observable.from([1,3,2]) 
var s2 = Rx.Observable.from([4,5,6]) 
var samplePromise = val => new Promise((resolve,reject)=>{  
setTimeout(()=> {if(val==3) reject(new Error(val)); else resolve(val);},val*1000)}); 

var mergedSource= Rx.Observable.merge(s1,s2) 
    .map(val => samplePromise(val))   
    .mergeAll() 
    .catch(err=>console.log('err' , err)) 
var subscribeTwo = mergedSource.subscribe(val => console.log('Example:', val)); 

В этом примере, когда val = 3 throw error и does not emit others. Как пропустить отклоненные обещания, я хочу испустить только разрешенную ценность обещания.

ответ

0

Правильный ответ без оператора mergeAll.

var s1 = Rx.Observable.from([1,3,2]) 
var s2 = Rx.Observable.from([4,5,6]) 
var samplePromise = val => new Promise((resolve,reject)=>{ 
setTimeout(()=> {if(val!=3) resolve(val); else reject('hata') },val*1000) 
}); 
var exampleTwo = Rx.Observable.merge(s1,s2) 
    .flatMap(val => Rx.Observable.fromPromise(samplePromise(val)).catch(err=>Rx.Observable.empty())) 


var subscribeTwo = exampleTwo.subscribe(val => console.log('Exampl:', val),err=>console.log("onError" ,err),()=>console.log('completed')); 
Смежные вопросы