2016-05-16 58 views
0

我有數組,其中的類指令有一個execute()函數,返回一個Observable。 execute函數將執行一個異步任務,當它完成時,它會調用myObserver.complete(),它應該觸發列表中的下一條指令,以調用它的execute()函數。我不知道如何做到這一點。如何使用TypeScript和RxJs連續執行一系列指令?

我正在實施所有這些,所以我願意接受任何建議,包括改變我設置我的教學課程的方式。主要目標是我需要按順序在每個指令異步執行方法中運行代碼。當指令完成執行時,移動到列表中的下一個,直到所有內容都被執行完畢。

目前我通過遞歸來做到這一點,我通過指令列表,然後索引我目前正在處理的指令。完成後,我將索引增加1並再次調用自己。雖然這有效,但必須有更好的方法,但我還沒有拿出一個。思考?

回答

2

如果我深知,你可以嘗試這樣的:對應於你的使用情況

Rx.Observable.from(yourArray).concatMap(function executeInstruction(item){ 
    return item.execute(...) 
    }) 

呢?這假定您的execute功能在每個項目上。 concatMap將認購executeInstruction返回的每個可觀察項目,並且只有在前一個觀察項目完成時纔會認購下一個項目。文檔here

UPDATE:打字稿方式:

Observable.from(instructions, (instruction) => { 
    return instruction; 
}).concatMap((instruction) => { 
    return instruction.execute(); 
}); 
+0

這看起來像它會爲我用的情況下工作,但我不知道如何與打字稿做到這一點。我試過:Observable.from(指令).concatMap((指令:指令)=> {0}返回instruction.execute(); });這抱怨道:「提供的參數不匹配呼叫目標的任何簽名」 – testing123

+0

啊,有一個fromArray。現在嘗試一下。 – testing123

+0

好吧,我不能用'打字稿',但錯誤信息很清楚。檢查您的呼叫目標的簽名和您提供的物品的類型,這真的很簡單...對於SO的調試問題,建議提供一個重現錯誤的示例代碼。關於'fromArray',它在Rxjs 4中,我認爲它也適用於Rxjs 5,但不要拿我的話來說。檢查文檔 – user3743222

相關問題