javascript - 显示数组列表,数组长度为 0 并且元素在反应中未定义
问题描述
所以,基本上我在两个不同的函数中有两个 api 调用,它们是从单个组件页面调用的。await 函数应用于它们中的每一个,因为从第一个 api 提供的每个响应都用作第二个 api 的参数。对于第一个 api 调用,在函数内部,响应被推送到名为 all_countries 的数组中。
const apiCall = getCountry(req)
.then((response) => {
all_countries.push(...response);
dispatch(actionSuccess(NICE_ONE, response));
})
.catch((error) => {
dispatch(actionFailure(NICE_ONE, error));
});
all_countries 中的每个数组对象都将被映射,并且值(即来自 all_countries 的每个对象中存在的国家代码)用于调用另一个 api 以获取响应,但我的问题是在控制台从第二个函数记录 all_countries 时,它显示空数组的符号。打开数组后,它会列出所有国家/地区。当我在控制台记录数组的长度时,它显示 0,在控制台记录 all_countries [0] 等元素时,它显示未定义。为什么会这样?有人可以帮帮我吗? 这会显示在控制台上
展开后,会显示: 在此处输入图像描述
所以,我发现在添加 all_countries.push 时,intellij 向我显示警告,响应不是数组类型,而是 AllCountryRes 类型。
AllRelaysRes 类型定义为:
export type AllRelaysRes = {
logo: string;
ipv4: string;
ipv6: string;
port: string;
location: {
id: number;
ip: string
};
};
getCountry 函数是这样的:
export const getCountry = (url: string): Promise<AllRelaysRes> => {
ExternalApi.setBaseUrl(url);
return ExternalApi.apiCall<AllRelaysRes>({
method: "GET",
url: "something",
});
};
来自 api 的响应是一个对象数组。我只是打字稿的初学者并尝试了一些东西。我的问题是如何将响应类型设为对象 AllRelayRes 的数组?不返回 ExternalApi.apiCall 尖括号 AllRelayRes 意味着预期的响应是 AllRelayRes 数组,因为 AllRelayRes 保留在尖括号内?我该如何解决?这是我得到数组长度为0的真正问题吗?
解决方案
我相信您正在处理 type 对象的集合AllRelayRes
,而不是数组。它[]
在控制台中显示,但这代表一个集合。
如果要将其用作数组,请在函数中指定类型<AllRelaysRes[]>
export const getCountry = (url: string): Promise<AllRelaysRes[]> => {
ExternalApi.setBaseUrl(url);
return ExternalApi.apiCall<AllRelaysRes[]>({
method: "GET",
url: "something",
});
};
然后您应该能够以数组格式操作数据
如果您想将其保留为一个集合,您可以使用
let x, key, obj
for(x in AllRelayRes) {
key = x; // 0, 1, 2 .. the index
obj = AllRelayRex[x] // the object
// country_name = AllRelayRex[x].country_name, etc
}
推荐阅读
- php - 将 wp_count_posts 限制为过去 7 天
- processing - 加工 | 程序滞后
- pandas - 无法比较数据集
- c# - 无法在 UWP 中的 WCF 流传输模式下读取字节
- javascript - Discord.js 检查消息是否为数字
- linux - bash 字符串插值返回空字符串
- sql - 用日期值替换字符串
- date - 从 Java 调用 oracle 数据库时,TO_DATE ('01/01/1980','dd/mm/yyyy') 不起作用
- amazon-web-services - 如何结合使用 AWS lambda 和 S3 来获取结果
- angular - jest.fn() 不涵盖模拟函数内部编写的代码行