在我的代码中,我有自定义的post方法,它扩展了angular 2的http类 .
post(url: string, body: string, options?: RequestOptionsArgs): Observable<any> {
if (!this._gs.externalRequest) {
let that = this;
this._gs.getToken().then((token) => {
if (token) {
options = this.prepareOptions(options, token);
}
return that.sendPostRequest(url, body, options);
});
}
else {
this._gs.externalRequest = false;
return this.sendPostRequest(url, body, options);
}
}
在上面的代码post方法返回一个Observable,而if条件 this._gs.getToken() in if条件从本地存储中读取令牌的异步调用并返回一个promise .
虽然编译doenst会产生任何错误,但是当我访问时
this.http.post('/ api / myFormHandler',this.form.value).subscribe((data)=> {});
class MyFormComponent- inline template:16:29 caused by: Cannot read property 'subscribe' of undefined
1 回答
由于JS的异步性质,您的第一个条件实际上并没有返回正确的东西 . 为了能够从
post
方法返回Observable<any>
,您应该修改第一个if
的主体以使用两个相互依赖的可观察对象 .首先,你必须将你的令牌返回方法转换为observable然后
flatMap
它,因为我们需要在第二个observable中得到这个结果 .请参阅这篇文章 - combining observables .