2017-01-03 15 views
0

如何僅用mergeAll運算符發出已解析的promise。如何僅用Rxjs發出已解析的值5 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) 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拋出錯誤並且不發出其他錯誤。 如何跳過被拒絕的承諾,我想只發出已解決的承諾價值。

回答

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'));