首页 > 解决方案 > 在 for 循环中等待分派时代码未执行

问题描述

我在这方面找不到任何东西,所以我决定在这里问。我正在使用 react-native 和 redux。我将业务逻辑排除在代码之外。

我有这个函数调用另一个执行 API 调用的函数。执行 API 调用的函数需要访问“getState”,这就是我使用 dispatch 的原因。

const getStuff = (day) => (dispatch) => {
    const result = await dispatch(functionThatDoesAPIRequest(day)
    }

然后我有这个循环数天的代码,在某些情况下需要进行 API 调用。在我正在测试的情况下,它不需要访问 API。直到我在注释中的 if 语句之间放置了一行,我才发现我的代码有问题。然后我将 if 更改为始终为 False 并且当代码行不在注释中时错误仍然存​​在,即使它永远无法到达那段代码。

    for (let i = 0; i < dayArray.length; i+=1) {
      if (false) {
       const resultThatIsNotNeeded = await dispatch(getStuff(dayArray[i])
      }
      // more business logic
    }

将 for 循环更改为 ForEach 循环以某种方式解决了这个问题。但我真的不知道为什么这会解决它。

dayArray.forEach(async (day, i) => {
  if (false) {
    const resultThatIsNotNeeded = await dispatch(getStuff(dayArray[i])
  }
} 

标签: react-nativeredux

解决方案


那是因为在您的 forEach 上,await 调用在异步函数内部,因为它应该在 for 循环中,我看不到任何在异步函数中执行的代码


推荐阅读