我正在尝试使用像这样的Angular HttpClient调用获取一些数据并返回成功:
return this.http.post('api/my-route', model).subscribe(
data => (
this.data = data;
return $window.location = ReturnUrlService.getAbsolute('/my-other-route');
)
)
为什么我不能这样做?我的应用程序是使用TypeScript 2.6.2的Angular 4.3我的理解是箭头函数应该等同于这个回调:
function(data) {
this.data = data;
return $window.location = ReturnUrlService.getAbsolute('/my-other-route');
}
...我正在对'数据'进行处理,因为它可以作为JQuery AJAX中的“成功”回调。订阅是否仅限于在类中设置属性的值?我的箭头功能出了什么问题?我知道我错过了一些基本的东西!
答案 0 :(得分:3)
如果" body"您只能使用()
是一种表达。你的身体"是两个陈述:
return this.http.post('api/my-route', model).subscribe(
data => (
this.data = data;
return $window.location = ReturnUrlService.getAbsolute('/my-other-route');
)
)
应该是:
return this.http.post('api/my-route', model).subscribe(
data => { // <==== changed this line
this.data = data;
return $window.location = ReturnUrlService.getAbsolute('/my-other-route');
} // <==== changed this line
)
return
语句看来你只想执行赋值,而不是返回任何值。如果是这种情况,只需从最后一个语句中删除return
关键字。
另一方面,如果您确实也希望将该值返回给该函数的调用者,请不要使用subscribe
,但是其他函数只会转换Observable
},such as map
:
public myMethod(): Observable<any> {
// ... create the model variable
return this.http.post('api/my-route', model).map(
data => {
this.data = data;
return $window.location = ReturnUrlService.getAbsolute('/my-other-route');
}
)
}
当然,请记住在您调用myMethod
的任何地方订阅结果:
public someOtherMethod() {
return this.myMethod().subscribe(stuff => console.log(stuff));
}