2017-08-15 33 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); 
} 
相關問題