json - 如何使用Observable从文件中获取json数据

标签 json angular typescript

我正在练习从使用此方法的json文件中读取数据,该文件具有国家和州列表,但是我想使用httpClient并通过测试使用这些方法,但是读取此数据的正确方法是什么。
伯爵方法:

  getCountries(): Observable<Country[]> {
    return of(countries['countries']);
  }
  getStates(countryID): Observable<State[]> {
    return of(countries['states'].filter(f => f.countryId === countryID));
  }

这是它如何形成我的一种方法:
  getC(): Observable<Country[]> {
    return this.http.get<Country[]>(this.link).pipe(map(k => {
      return k['countries'];
    }));
  }
  getS(CID): Observable<State[]> {
    return this.http.get<State[]>(this.link).pipe(map(v => {
      return v['states'].filter(f => f.countryId === CID);
    }));
  }
我看到这样的东西,但是我有错误
  getC3(): Observable<Country[]> {
    return this.http.get<Country[]>(this.link)
      .toPromise()
      .then(res => <Country[]>res.countries)
      .then(data => {return data});
    }
正确的方法如何做到这一点,
错误:
PromError
已经过了几天,这似乎是一个严重的问题,所以我要问这一点,从这个json获取数据的方法是什么:
  [
    {
      "data": [
        {
           "label": "Select State",
           "value": null
        },
        {
          "label": "Adeje",
          "value": {
             "county": "Gran Canaria",
             "state": "Islas Canarias",
             "country": "España"
           }
        },
        {
          "label": "Agaete",
          "value": {
            "county": "Gran Canaria",
            "state": "Islas Canarias",
            "country": "España"
         }
       }
     ]
   }
 ]
以及如何从此json获取数据:
[
  {
    "label": "Select State",
    "value": null
  },
  {
    "label": "Adeje",
    "value": {
      "county": "Gran Canaria",
      "state": "Islas Canarias",
      "country": "España"
    }
  },
  {
    "label": "Agaete",
    "value": {
      "county": "Gran Canaria",
      "state": "Islas Canarias",
      "country": "España"
    }
  }
]
考虑到我使用--strict模式

最佳答案

解决问题的最简单方法是认识到,使用angular时的最佳做法是使用Observables而不是使用Promises问题
考虑代码

getC3(): Observable<Country[]> {
  return this.http.get<Country[]>(this.link)
    .toPromise()
    .then(res => <Country[]>res.countries)
    .then(data => {return data});
  }
这行return this.http.get<Country[]>(this.link)将返回Observable。如果您在.toPromise()上调用Observable,则返回Promise。因此,您将得到Promise<Country[]> does not contain properties ... from type Observable<Country[]>的错误
解决方案
解决此问题的一种方法(更好的方法)是将类型简单地保持为Observable。
getC3(): Observable<Country[]> { return this.http.get<Country[]>(this.link)}
我在下面不建议您将返回类型更改为Promise
getC3(): Promise<Country[]> {
  return this.http.get<Country[]>(this.link)
    .toPromise()
    .then(res => <Country[]>res.countries)
    .then(data => {return data});
  }

关于json - 如何使用Observable从文件中获取json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64292045/

相关文章:

java - 为什么 Google 的 JSON 转换器 "GSON"不遵循方法覆盖概念?

php - 为什么我收到 typeError value is null 但在我的 firebug 中我可以看到有这些值而不是 null?

javascript - 在 Javascript 中每 n 秒读取一次 JSON

angular - 没有 RuntimeCompiler 的运行时提供程序

angular - 将两个小数位添加到数字TypeScript Angular

javascript - Polymer JS POST JSON 格式

javascript - Angular 5 - 捕获整个表格,包括 UL、LI

html - 使用 Angular 或 Angular Material 的 HTML 表格单元格内的垂直线和水平双向箭头

angular - 如何将适用于 Javascript 的 TUI 图像编辑器导入到我的 Angular 应用程序中?

javascript - 如果我的界面对象具有相似的键,则尝试为其分配值?