Angular 返回修改的可观测值角度6
考虑以下示例:Angular 返回修改的可观测值角度6,angular,typescript,observable,Angular,Typescript,Observable,考虑以下示例: login(context: LoginContext): Observable<Credentials> { let credentials = JSON.stringify(context); this.httpClient.post("http://localhost:64636/api/Account/login", credentials, { headers: new HttpHeaders({ "Cont
login(context: LoginContext): Observable<Credentials> {
let credentials = JSON.stringify(context);
this.httpClient.post("http://localhost:64636/api/Account/login", credentials, {
headers: new HttpHeaders({
"Content-Type": "application/json"
})
}).subscribe(response => {
let token = (<any>response).token;
const data = {
username: context.username,
token: token
};
this.setCredentials(data, context.remember);
return of(data);
}, err => {
});
}
login(上下文:LoginContext):可观察{
让credentials=JSON.stringify(上下文);
此.httpClient.post(“http://localhost:64636/api/Account/login“、全权证书、{
标题:新的HttpHeaders({
“内容类型”:“应用程序/json”
})
}).订阅(响应=>{
让令牌=(响应).token;
常数数据={
用户名:context.username,
令牌:令牌
};
this.setCredentials(数据、上下文、记住);
返回(数据);
},err=>{
});
}
这里我试图实现的是封装从httpClient
接收的数据并返回它,但这是在httpClient的执行完成后完成的。编译器告诉我,“声明类型既不是'void'也不是'any'的函数必须返回值”,这是理所当然的。我的问题是,当父可观察对象必须等待httpClient.post()可观察对象完成其任务时,如何解决此问题?使用修改可观察对象返回的值:
login(context: LoginContext): Observable<Credentials> {
let credentials = JSON.stringify(context);
return this.httpClient.post("http://localhost:64636/api/Account/login", credentials, {
headers: new HttpHeaders({
"Content-Type": "application/json"
})
}).pipe(
map(response => {
let token = (<any>response).token;
const data = {
username: context.username,
token: token
};
this.setCredentials(data, context.remember);
return data;
})
);
}
login(上下文:LoginContext):可观察{
让credentials=JSON.stringify(上下文);
返回此.httpClient.post(“http://localhost:64636/api/Account/login“、全权证书、{
标题:新的HttpHeaders({
“内容类型”:“应用程序/json”
})
}).烟斗(
映射(响应=>{
让令牌=(响应).token;
常数数据={
用户名:context.username,
令牌:令牌
};
this.setCredentials(数据、上下文、记住);
返回数据;
})
);
}
您是否尝试过在this.httpClient.post…
之前放置return
并订阅login
?是的,这会起作用,但问题是,我想把收到的数据封装在login函数中,然后返回它。是的,我自己正在阅读map操作符的描述。这是实现我目标的正确方法。谢谢。但是,这并不能消除错误“声明类型既不是'void'也不是'any'的函数必须返回值”对不起,我忘记了返回可观察值。我改正了。我假设数据
与凭证
类类型兼容(您可能需要强制转换值)。