首页 > 解决方案 > Ionic 4 http.get.subscribe 不存储价值

问题描述

所以这可能是重复的什么的,但到目前为止我找不到任何简单明了的东西,所以我只想问。

我有一些简单的代码如下:

  fetchData() {
    let dataArray: Array<any> = [,,,];
    this.prepareDataRequest()
    .subscribe(data => {
      this.dataArray[0] = JSON.parse(JSON.stringify(data["results"]));
      this.dataArray[1] = Object.keys(JSON.parse(JSON.stringify(data["results"]))).length;
      console.log(this.dataArray[0]);
    },
    err => {
      this.dataArray[2] = `Error --> Status: ${err.status}, Message: ${err.statusText}`;
    });
    return this.dataArray;
  }

  prepareDataRequest() {
    const dataUrl = 'https://randomuser.me/api/?results=10&inc=gender,name,nat,email,phone,id';
    return this.http.get(dataUrl);
  }

完美的console.log(this.dataArray[0]);作品,但回报是空的。到目前为止,我发现这是因为它在return this.dataArray;获取项目之前执行。

但是我该如何解决呢?有没有一种简单的方法可以说“等待所有东西都存储好后再回来”?还是我这样做完全错误(可能是xD)?

我已经尝试了一些异步和东西的东西,但我对这个有点陌生,所以一切都不太顺利。

标签: angulartypescriptionic-frameworkhttp-getsubscribe

解决方案


您在订阅范围之外返回结果,因此 dataArray 尚未初始化。

您需要更改 fetchData() 方法,如下所示:

  fetchData() {
    let dataArray: Array<any> = [, , ,];
    this.prepareDataRequest()
      .subscribe(data => {
          this.dataArray[0] = JSON.parse(JSON.stringify(data["results"]));
          this.dataArray[1] = Object.keys(JSON.parse(JSON.stringify(data["results"]))).length;
          console.log(this.dataArray[0]);
          // return your dataArray here
          return this.dataArray;

        },
        err => {
          this.dataArray[2] = `Error --> Status: ${err.status}, Message: ${err.statusText}`;
        });
  }

另外,当您只使用 dataArray 字段时,我对 dataArray 局部变量的声明有点困惑。也许那里不需要它。


推荐阅读