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'的函数必须返回值”对不起,我忘记了
返回可观察值。我改正了。我假设
数据
凭证
类类型兼容(您可能需要强制转换值)。