【发布时间】:2021-08-17 15:12:33
【问题描述】:
所以,基本上我在两个不同的函数中有两个 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] 等元素时,它显示未定义。为什么会这样?有人可以帮帮我吗? This gets shown on console
展开后,如下所示: enter image description here
所以,我发现在添加 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 的真正问题吗?
【问题讨论】:
-
我们能看到你说的console.log吗?听起来像是在返回一个对象,而不是数组?
-
我已将屏幕截图添加到问题中。
-
你能给我们一个codeandbox来互动吗?
-
对不起,我不能。如果可以的话,我已经发布了代码,但我想我发现了问题所在。在将数据推送到 all_countries 时,它说“响应”不是数组类型。我正在想办法将响应类型声明为对象数组。
-
如果有帮助,我添加了代码。
标签: javascript arrays reactjs promise