0

我有一个函数,它以 ID 作为参数并根据 ID 进行 HTTP 调用。它返回一个 Observable。我希望具有不同参数的调用是完全独立的,但它们会相互影响。

我将
RxJS 5.0.0-
beta.2 Angular 2.0.0-beta.7 用于 http 调用
Typescript 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 的字符模型。 <- 问题
第二个 console.log 打印 ID 2 的字符模型。

为什么这两个电话不完全独立?第二个电话怎么知道第一个电话的数据?

4

1 回答 1

1

问题只是我完全误用了 EMPTY_MODEL。它基本上是我在 .map() 函数中编辑的一个类范围的变量。一个与 RxJS、Angular 或 HTTP 无关的愚蠢错误

于 2016-03-15T15:00:39.803 回答