【问题标题】:API response overwriting another API response inside of await Promise.all()API 响应覆盖 await Promise.all() 中的另一个 API 响应
【发布时间】: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


【解决方案1】:

问题不在于 React-Native 应用程序发出的请求。

这是运行我遇到的 API 的 ColdFusion 服务器中的范围界定问题。设置服务器的开发人员发现了问题并修复了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多