2016-04-19 95 views
0

同时学习了一些RxJs我遇到了这个问题。我用一个对象启动我的运算符链,并使用它的属性的ooe来使用平面映射来执行AJAX请求,但我需要将其他对象的属性与Ajax结果一起传递。我带来了以下解决方案,但我确定必须有一种更优雅或更高效的解决方案。任何关于如何改进代码的想法?通过RxJs运营商传递数据

function fbInfo(ezfb){ 
const fbItems$ = Rx.Observable.from(lista) 
    .map(item => Object.assign({}, item, {query: `/${item.page}/feed?limit=1`})) 
    .do(x=>console.log(x)) 
    .flatMap(item => { 
     return Rx.Observable.fromPromise(ezfb.getLoginStatus().then((res)=>{return ezfb.api(item.query)})) 
       .withLatestFrom(Rx.Observable.from([item]),(res, it)=> Object.assign({}, res, it)) 
    }).map(item => { return {    
     mensaje: item.data[0].message, 
     id: item.data[0].id, 
     created: item.data[0].created_time, 
     nombre: item.nombre 
     } 
    }) 
return fbItems$ 
} 

感谢提前:)

回答

0

在一般模式而言,我知道的并不比背着你想保留通过每个阶段(你有)什么更清洁的方式。根据具体的语法,是的,有更短的方式来表达你想要的。尴尬=> { return { ... } }语法可以替换为=> ({ ... })。除非您真的需要同一对象根目录上的属性,否则您可以取消Object.assign。但是数据流将基本相同。