Typescript + RxJS:如何映射一个observable来运行一个循环?
问题描述:
我想了解如何将观察到的映射到循环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
那东西,然后循环它在理解。我想我不必
答
我觉得这是你所需要的:
createMember.switchMap(member => {
let report = [];
allYear.foreach(i => report[i] = getMySpecialValue(i);
return Observable.of(report);
}
'让createCustomer'是可观察到的?如果是这样,它拥有什么样的内容? 1个发射与阵列,1个发射与物体?多重排放? - 另外:如果你可以添加一个例子,说明你希望结果如何看起来像 – olsn
对不起,请允许我添加更多详细信息 – sowen
对不起,我还是不完全明白,你到底想要做什么 - 但它看起来应该是一个非常简单的案例,你可能已经找到了一个解决方案 - 如果你有请将它作为答案发布并接受你自己的答案:-) – olsn