问题描述
我的后端正在以地图格式发送数据:
{
"key1": ["value1","value2"],"key2": ["value3"]
}
我使用 HttpClient.post 来获取数据。数据返回正常,但是当我尝试执行 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
。
不过,您可以将其转换为 Map
。 Map
采用键值对数组,因此您可以使用 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 对象,您只能将其映射到具有字段的对象。不是方法。 Map 不像对象那样是模型。它是一个“功能对象”。构造函数也不会被触发
这意味着,即使你说它应该是一个地图,但实际上它是一个没有方法的 JSON 对象。
因此,您应该通过管道将数据映射到 Map。
CloseModalViewControllers