Angular 将模型值发送给observer.next();

Angular 将模型值发送给observer.next();,angular,Angular,我有一个如下的函数。我正在试图弄清楚如何将userDetails发送给observer.next() getUserDetails(userId:string):可观察{ 常量url=`this.candidateUrl}/Get`; 这个.u http.get(url+'/'+userId).subscribe((resp)=>{ const userDetails:GetUserByIdModel={ 名字:“乔伊斯”, 联系渠道:[ {类型:1,值:'test@gmail.com' },

我有一个如下的函数。我正在试图弄清楚如何将userDetails发送给observer.next()

getUserDetails(userId:string):可观察{
常量url=`this.candidateUrl}/Get`;
这个.u http.get(url+'/'+userId).subscribe((resp)=>{
const userDetails:GetUserByIdModel={
名字:“乔伊斯”,
联系渠道:[
{类型:1,值:'test@gmail.com' },
{类型:2,值:'01111111'}
],
};
})
返回新的可观察对象((观察者)=>{
下一步(用户详细信息);
observer.complete();
});
}

当前,即使我将const userDetails:GetUserByIdModel更改为let/var userDetails:GetUserByIdModel,我也会得到“找不到名称‘userDetails’”,您在这里尝试的是转换从API调用获得的响应。这是使用Rxjs
map
操作符的最佳情况。以下是方法:

import { map } from 'rxjs/operators';

...

getUserDetails(userId: string): Observable < GetUserByIdModel > {
  const url = `${this.candidateUrl}/Get`;
  return this._http.get < any > (url + '/' + userId).pipe(
    map(resp => {
      const userDetails: GetUserByIdModel = {
        firstname: 'Joyce',
        contactChannels: [{
            type: 1,
            value: 'test@gmail.com'
          },
          {
            type: 2,
            value: '0111111111'
          }
        ],
      };
      return userDetails;
    })
  );
}
从'rxjs/operators'导入{map};
...
getUserDetails(userId:string):可观察{
常量url=`this.candidateUrl}/Get`;
返回此文件。_http.get(url+'/'+userId)。管道(
映射(resp=>{
const userDetails:GetUserByIdModel={
名字:“乔伊斯”,
联系渠道:[{
类型:1,
值:'test@gmail.com'
},
{
类型:2,
值:“01111111”
}
],
};
返回用户详细信息;
})
);
}

首先,当收到订户的响应时,您想返回用户吗?如果答案是“是”,您可以在
订阅
中添加returning,或者您希望返回一个新的可观察对象,因为您有人订阅了此可观察对象,您应该执行以下操作:

observer: Subject<any>  = new BehaviorSubject<any>;

getUserDetails(userId: string): Observable<GetUserByIdModel> {
    const url = `${this.candidateUrl}/Get`;
    this._http.get<any>(url + '/' + userId).subscribe((resp) => {

    // Now you emitting new data as soon as possible you get data 
    this.observer.next(resp);
    })

  }
  • 首先声明一个变量
  • 在订阅服务器内部使用此变量

  • 下次请说得更清楚些,如果你有任何问题,请随时提问。

    如果你觉得我上面写的有用,你可以投票支持我的答案。通常,您使用主题在多个组件中共享数据,您应该将此逻辑放在服务中
    userDetails: GetUserByIdModel = {};
    
    getUserDetails(userId: string): Observable<GetUserByIdModel> {
        const url = `${this.candidateUrl}/Get`;
        this._http.get<any>(url + '/' + userId).subscribe((resp) => {
          this.userDetails = {
            firstname: 'Joyce',
            contactChannels: [
              { type: 1, value: 'test@gmail.com' },
              { type: 2, value: '0111111111' }
            ],
          };
        })
    
        return new Observable((observer) => {
          observer.next(this.userDetails);
          observer.complete();
        });
    
      }
    
    
    observer: Subject<any>  = new BehaviorSubject<any>;
    
    getUserDetails(userId: string): Observable<GetUserByIdModel> {
        const url = `${this.candidateUrl}/Get`;
        this._http.get<any>(url + '/' + userId).subscribe((resp) => {
    
        // Now you emitting new data as soon as possible you get data 
        this.observer.next(resp);
        })
    
      }
    
    observer.subscriber(data => {
      // and here you'll have data from that observer
      console.log(data)
    })