我为angular 2 http服务创建了一个包装器,它有一个post方法,如下所示。它返回一个可观察的。
post(url:string, data:any, headers:any, animation:boolean):any{
let thisObject = this;
if(animation!=false) {
thisObject.emitCallStateChange(true);
}
return this._http.post(url,data,headers).finally(function(){
thisObject.emitCallStateChange(false);
});
}
我这样消费它:
return this._http_service.post(ConfigService.BASE_URL+'api/auth/forgotpass',email,{
headers:headers
},true);
我想要做的是为csrf验证请求执行GET并在post
方法中返回此observable之前附加csrf标记。所以,我试图将一个observable包含在另一个中,如下所示:
this._http.get("api/getCsrf").subscribe(csrf=>{
let body = csrf.json();
data += "&_csrf="+body._csrf;
console.log(data);
return this._http.post(url, data, headers).finally(function () {
thisObject.emitCallStateChange(false);
});
});
但它不能用于显然需要返回observable
的原因。一旦csrf请求完成,我需要一种方法来返回带有post
请求的最终observable。有没有办法可以链接观察者,只返回其中一个?
答案 0 :(得分:2)
您可以利用flatMap
运算符:
this._http.get("api/getCsrf").flatMap(csrf=>{
let body = csrf.json();
data += "&_csrf="+body._csrf;
console.log(data);
return this._http.post(url, data, headers).finally(() => {
thisObject.emitCallStateChange(false);
});
});
});