【问题标题】:Typescript + RxJS: how to map an observable to run a loop?Typescript + RxJS:如何映射 observable 以运行循环?
【发布时间】:2018-01-23 21:33:00
【问题描述】:

我正在尝试了解如何将可观察对象映射到循环

代码如下:

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 observable,但理想情况下,我只想进行一次createMember http 调用。

希望现在更有意义。

好吧,我想我可能想多了。

我可以只做createMember.subscribe 然后循环遍历它。 /脸

我正在以一种 scala 方式思考,我可以 flatMap 那个东西,然后将它循环到一个 for-comprehension 中。我想我不必

【问题讨论】:

  • let createCustomer 是 Observable 吗?如果有,它包含什么样的内容? 1 次带有数组的单次发射,1 次带有对象的单次发射?多重排放? - 另外:如果您可以添加一个您希望结果看起来如何的示例,这将有所帮助
  • 对不起,让我添加更多细节
  • 对不起,我仍然不完全明白,你到底想做什么 - 但它看起来应该是一个非常简单的案例,你可能已经找到了解决方案 - 如果你有请发布它作为一个答案并接受你自己的答案:-)

标签: angularjs typescript rxjs


【解决方案1】:

我认为这是你需要的:

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

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多