doo*_*glu 2 observable rxjs angular
我有以下返回观察者的方法,但它被调用了两次:
public getClassesAndSubjects(school: number, whenDate: string): Observable<ClassesAndSubjects[]> {
console.log('1');
const observable = this.classService.GetClassesAndSubjects(school, whenDate);
console.log("2");
observable.subscribe(data => {
if (!data.hasOwnProperty('errors')) {
this.classesSubjects = data;
}
}, error => {
console.log("ERROR loading GetClassesAndSubjects: " + error);
});
console.log("3");
return observable;
}
Run Code Online (Sandbox Code Playgroud)
我的意思是一条线路const observable = this.classService.GetClassesAndSubjects(school, whenDate);被调用两次并向服务器发送两次请求。
像这样调用:
this.classInstance.getClassesAndSubjects(school, date).subscribe(value => {
// TODO
});
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为您订阅了 observable 两次,并且 observable 每次订阅时都会执行。
改变这个:
observable.subscribe(data => {
if (!data.hasOwnProperty('errors')) {
this.classesSubjects = data;
}
}, error => {
console.log("ERROR loading GetClassesAndSubjects: " + error);
});
Run Code Online (Sandbox Code Playgroud)
对此:
observable.do(data => {
if (!data.hasOwnProperty('errors')) {
this.classesSubjects = data;
}
});
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您只需在您的流中添加一个运算符,该运算符在您在返回时订阅它之前不会执行。
| 归档时间: |
|
| 查看次数: |
6612 次 |
| 最近记录: |