HttpClient post 不是 return 预期的类型

HttpClient post doesn't return expected type

我的后端正在以地图格式发送数据:

{
   "key1": ["value1", "value2"],
   "key2": ["value3"]
}

我使用HttpClient.post来获取数据。数据 returns 很好,但是当我尝试 data.get 时出现错误

this.http.post<Map<string, string[]>>(url, body).toPromise()
  .then((data: Map<string, string[]>) => {
    console.log(data);
    console.log(data instanceof Map); // false
    data.get('key1')                  // TypeError data.get is not a function
  });

网络请求返回的数据将是一个普通对象,而不是Map

不过您可以将其转换为 MapMap 采用键值对数组,因此您可以使用 Object.entries:

this.http.post<Record<string, string[]>>(url, body).toPromise()
  .then((data) => {
    const dataMap = new Map(Object.entries(data))
    dataMap.get('key1')
  });

我建议不要使用 Promise。使用 observable,因为它更好调试并且具有更多功能。

http 构建了一个原始的 JSON 对象,您只能将其映射到具有字段的对象。不是方法。地图不像对象那样是模型。它是一个“功能对象”。构造函数也不会被触发

这意味着,即使你说它应该是一个地图,它实际上是一个 JSON 没有方法的对象。

出于这个原因,您应该通过管道将数据映射到地图。


this.http.post<object>(url, body)
.pipe( map(jsonObject => {
          const map = new Map<string, string[]>();
          for (const value in jsonObject) {
            map.set(value, jsonObject[value]);
          }
          return map;
        })
      ).subscribe(
        (data: Map<string, string[]>) => {
          console.log(data);
          console.log(data instanceof Map); // true
          data.get("key1");
        },
        error => console.log(error.error)
      );