0

ID をパラメーターとして受け取り、ID に応じて HTTP 呼び出しを行う関数があります。Observable を返します。異なるパラメータを使用した呼び出しは完全に独立していると予想していましたが、互いに影響を与え合っています。

http 呼び出し Typescript 1.8.2には
RxJS 5.0.0-beta.2
Angular 2.0.0-beta.7を使用します。

コード:

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 }));
.logは私のEMPTY_MODELを出力します。
2 番目の console.log は、ID 1 のキャラクター モデルを出力します。

次に
getCharacterDetails(2).subscribe((details) => { this.details = details });
、最初のconsole.logにEMPTY_MODELを出力します。
2 番目の console.log は、ID 2 のキャラクター モデルを出力します。

実際の動作:

私は最初のコンソールを呼び出します
getCharacterDetails(1).subscribe((details) => { this.details = details }));
.logは私のEMPTY_MODELを出力します。
2 番目の console.log は、ID 1 のキャラクター モデルを出力します。

getCharacterDetails(2).subscribe((details) => { this.details = details });
最初の console.log は ID 1 のキャラクター モデルを出力します。 < - 問題
2 番目の console.log は ID 2 のキャラクター モデルを出力します。

2 つの呼び出しが完全に独立していないのはなぜですか? 2 番目の呼び出しは、最初の呼び出しのデータをどのように認識しますか?

4

1 に答える 1