【发布时间】:2020-08-27 17:08:23
【问题描述】:
我正在开发一个 React-Native 应用程序,它通过 LocalHost 访问了一些开发 API。
我在同一个函数中调用两个 API 时遇到问题,其中(在大多数情况下)来自 API(2) 的响应似乎被来自 API(1) 的响应覆盖。
API(1) 返回一个数组,例如 [1, 2, 3, 4]
和
API(2) 返回一个数组,例如 ['a', 'b', 'c', 'd']
在同一个函数中调用两个 API 会为两个响应返回 [1, 2, 3, 4]。我肯定会访问两个不同的 URL,从我的浏览器访问两个 API 确认它们发送回不同的数据。
就缓解此问题而言,我是否误解了 await Promise.all() 的使用?
async componentDidMount() {
await this.getStuff();
}
getStuff = async () => {
const [firstResponse, secondResponse] = await Promise.all([
axios.get(`${API_URL}/quarry/equipment/s07`), //returns [1, 2, 3, 4]
axios.get(`${API_URL}/quarry/materials/Q08`), //returns ['a', 'b', 'c', 'd']
]);
console.log(firstResponse.data); // [1, 2, 3, 4]
console.log(secondResponse.data); // [1, 2, 3, 4]
};
这是我遇到的问题的简化版本。我正在使用 Redux 和 Redux-Thunk 来调度我的异步 API 调用,并且我花了很长时间假设我使用它们不正确。在绕过 Redux action creators 和 redux-thunk,并将请求归结为这个简单的代码后,我得到了相同的结果。
是否正确使用await Promise.all([])?
【问题讨论】:
-
我怀疑您共享的示例代码中存在问题,但也许我遗漏了一些东西。假设您的实际代码更复杂,它可能不在此代码示例之外吗?
-
@Evert 我也有同样的想法。所以我将 API 调用减少到这 12 行代码,结果和以前一样
-
我刚刚使用两个公共 API (pokeapi.co) 测试了相同的代码,它工作得很好。运行我的 localHost API 的开发服务器是否可能是问题所在?
-
是的,这很有道理!您在网络标签中看到了什么?
标签: react-native promise axios