【发布时间】:2016-03-15 14:13:10
【问题描述】:
我有一个函数,它以 ID 作为参数并根据 ID 进行 HTTP 调用。它返回一个 Observable。我希望具有不同参数的调用是完全独立的,但它们会相互影响。
我用
RxJS 5.0.0-beta.2
Angular 2.0.0-beta.7 用于 http 调用
打字稿 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 的字符模型。
为什么这两个调用不完全独立?第二次调用如何知道第一次调用的数据?
【问题讨论】:
-
您能在您的console.log 中添加一个前缀吗?像
console.log(number + ': '+JSON...);这样的东西可以肯定;-) -
我按照您的建议将前面的 ID 添加到了 console.log 中。实际上没有任何改变,控制台日志现在显示:
1: {EMPTY_MODEL}然后1: {data for ID 1}然后2: {data for ID1}然后2: {data for ID2}。您希望得到什么结果? -
我认为这与 forkJoin 无关,这听起来可能是您处理
EMPTY_MODEL的方式。 -
天哪,你说的太对了:|多么愚蠢的疏忽-.-定义空模型以便我可以用它初始化变量的“最佳”方法是什么? EMPT_MODEL 看起来像这样
{name: '', age: 0, ...} -
我刚刚创建了一个 getEmptyModel 方法,它返回一个完全用“空”数据(如空字符串和零)初始化的 CharacterDetails 对象。
标签: angular rxjs5 angular2-http