无法使用forkJoin创建2个独立的Observable

时间:2016-03-15 14:13:11

标签: angular rxjs5 angular2-http

我有一个函数,它将ID作为参数并进行HTTP调用,具体取决于ID。它返回一个Observable。我希望不同参数的调用完全独立,但它们相互影响。

我用左 RxJS 5.0.0-beta.2
Angular 2.0.0-beta.7 for http calls
打字稿1.8.2

代码:

getCharacterDetails (id : number) : Observable<CharacterDetails> {
    let keys : SpreadsheetKeys = this.characters[id];
    if (!keys) {
        return null;
    }

    let frontUrl : string = `${BASE_URL}/${CELLS}/${keys.spreadsheetKey}/${keys.frontWorksheetKey}/${OPTIONS}`;
    let backUrl : string = `${BASE_URL}/${CELLS}/${keys.spreadsheetKey}/${keys.backWorksheetKey}/${OPTIONS}`;

    return Observable.forkJoin(

        this.http.get(frontUrl).map(response => response.json()),
        this.http.get(backUrl).map(response => response.json()))

        .map((response : any[]) => {

            let character : CharacterDetails = EMPTY_MODEL;

            console.log(JSON.stringify(character)); // The 1st console.log

            applyFrontSheetToCharacter(response[0], character);
            applyBackSheetToCharacter(response[1], character);

            console.log(JSON.stringify(character)); // The 2nd console.log

            return character;
        });
}

预期行为:

我打电话给 getCharacterDetails(1).subscribe((details) => { this.details = details }));
第一个console.log打印我的EMPTY_MODEL 第二个console.log打印ID 1的字符模型。

然后我打电话给 getCharacterDetails(2).subscribe((details) => { this.details = details });
第一个console.log打印我的EMPTY_MODEL 第二个console.log打印ID 2的字符模型。

实际行为:

我打电话给 getCharacterDetails(1).subscribe((details) => { this.details = details }));
第一个console.log打印我的EMPTY_MODEL 第二个console.log打印ID 1的字符模型。

然后我打电话给 getCharacterDetails(2).subscribe((details) => { this.details = details });
第一个console.log打印ID 1的字符模型。&lt; - 问题
第二个console.log打印ID 2的字符模型。

为什么2个电话不完全独立?第二次通话如何知道第一次通话中的数据?

1 个答案:

答案 0 :(得分:1)

问题很简单,我完全滥用了EMPTY_MODEL。它基本上是我在.map()函数中编辑的类范围变量。 与RxJS,Angular或HTTP

无关的愚蠢错误