2017-08-15 80 views
1

我想了解如何将观察到的映射到循环Typescript + RxJS:如何映射一个observable来运行一个循环?

的代码看起来是这样的:

let count = now.getFullYear() - this.startYear + 1; 
let start = this.startYear; 

let allYears = Array.apply(0, Array(count)) 
    .map(function (element, index) { 
    return index + start; 
    }); 

// from is in `import {from} from "rxjs/observable/from";` 
let yearEmitter = from(allYears); 

let createCustomer = this.customerService.create(); // an http call to return a customer in Json 
let createMember = createCustomer.map(c => this.customerService.createMember(c["customerId"])); // an http call to return a member in Json 

createMember.map(member=> { 
    // ??? what can I do here? 
    // I need to map it to another observable here for every year 
}) 

基本上,创建的成员,我想运行从一开始一年一个报告今年。我不能做allYear.foreach(i => createMember.map(blab)),因为这似乎会多次调用createMember。

小结,样品数据可能是:startYear = 2015

然后当返回createMember,它应该包含一个MEMBERID,它可以被用来生成报告(我需要产生用于测试的新成员报告样本目的)。

因此,在(2015, 2016, 2017)的范围内,我想映射新成员以遍历该列表中的项目,并进行另一个http调用以创建示例报告。我不需要任何输出,我只需要多次链接createMember可观察,但理想情况下,我只想将createMember http调用一次。

希望它现在更有意义。

好吧,我认为我可能会过度谴责它。

我只能做createMember.subscribe,然后循环。/facepalm

我在思考的方式,我可以flatMap那东西,然后循环它在理解。我想我不必

+0

'让createCustomer'是可观察到的?如果是这样,它拥有什么样的内容? 1个发射与阵列,1个发射与物体?多重排放? - 另外:如果你可以添加一个例子,说明你希望结果如何看起来像 – olsn

+0

对不起,请允许我添加更多详细信息 – sowen

+0

对不起,我还是不完全明白,你到底想要做什么 - 但它看起来应该是一个非常简单的案例,你可能已经找到了一个解决方案 - 如果你有请将它作为答案发布并接受你自己的答案:-) – olsn

回答

0

我觉得这是你所需要的:

createMember.switchMap(member => { 
    let report = []; 
    allYear.foreach(i => report[i] = getMySpecialValue(i); 
    return Observable.of(report); 
} 
相关问题