【问题标题】:My function return undefined but works well inside我的函数返回未定义但在内部运行良好
【发布时间】:2019-07-04 04:06:46
【问题描述】:

我正在使用一个 Web 服务,我得到的值很好,但是它返回的函数未定义:/

我一直在尝试使用 async 和 await 但我不确定。

constructor(private sessionstore: SesionStoreService, private httpClient: HttpClient) { }

  ngOnInit() {
    let data:any = this.previData();
    console.log(data);
  }



  private _datosPrevision: any;

 previData() {

    this.previsiones().subscribe(data =>{
      this._datosPrevision = data;
      console.log(this._datosPrevision);
      return this._datosPrevision;
    })

  }

  previsiones():Observable<any>{
    const urlProvisiones: string = 'http://localhost:8080/api/v1/pacientes/previsiones';

    const httpOptions2 = {
      headers: new HttpHeaders({
        'Content-Type':  'application/x-www-form-urlencoded',
        'Authorization': this.sessionstore.token
      })
    };
    return this.httpClient.get(urlProvisiones,httpOptions2);
  }

我想在两个 console.log 中获得相同的值

【问题讨论】:

    标签: angular typescript httpclient


    【解决方案1】:

    由于是异步调用,所以不知道什么时候会返回。

    因此,如果您想获取 ngOnInit() 中的数据,请将您的方法调用移到其中。

     ngOnInit() {
       this.previsiones().subscribe(data =>{
          this._datosPrevision = data;
          console.log(this._datosPrevision);
       })
     }
    

    但我认为您的代码看起来不错(至少对我而言)。

    P.S:建议在Service内部调用你的API而不是Component。

    【讨论】:

      【解决方案2】:

      未定义的原因:

       previData() {
          this.previsiones().subscribe(data =>{
            this._datosPrevision = data;
            console.log(this._datosPrevision);
            return this._datosPrevision;
          })
        }
      

      previData() {...} 没有返回任何内容,这就是为什么将 undefined 分配给数据。

      this._datosPrevioson 分配有 data 值,您可以在代码中使用它。

      this.previsiones().subscribe(data =>{
            this._datosPrevision = data;  
            console.log(this._datosPrevision);
            return this._datosPrevision;
      })
      

      2 种不同的数据打印方式:

      您可以在subscribe() 中打印它(您已经这样做了)。或者,将 previsiones 从 observable 转换为 promise,然后使用 async/await

      【讨论】:

        【解决方案3】:

        使用服务获取您的数据

        由于从 API 返回数据需要一些时间,因此您需要从服务中回调有关作业的完成情况。

        export class UserService {
        
            constructor(private http: HttpClient) {}
            previsiones():Observable<any>{
            const urlProvisiones: string = 'http://localhost:8080/api/v1/pacientes/previsiones';
        
            const httpOptions2 = {
              headers: new HttpHeaders({
                'Content-Type':  'application/x-www-form-urlencoded',
                'Authorization': this.sessionstore.token
              })
            };
            return this.httpClient.get(urlProvisiones,httpOptions2);
          }
        }
        

        如下调用函数:

        export class UserComponent implements OnInit {
          constructor(private service: UserService) { }
          ngOnInit() {
            this.service.previsiones()
            .subscribe( data => {  console.log(data); });
          }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-24
          • 1970-01-01
          • 2014-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多