javascript - 嵌套 forEach 循环中的异步代码 - React Native

标签 javascript react-native asynchronous foreach

我的输入数据的格式如下:

[ [4, 1, 2], [2, 5] ]

我想对数组中的每个数字进行 api 调用,并得到如下输出:

[ [response_4, response_1, response_2], [response_2, response_5] ]

我已经坚持这个逻辑两天了——我无法正确格式化我的返回数组。相反,它返回:

[ response_4, response_1, response _2, response_2, response_5 ]

我知道我在使用 Promise/async 方面做错了,而且我也知道我需要在某个时候将 temp 重置为 length = 0,但每次我添加它时,它只会返回 []作为我的输出。有什么建议/帮助吗?

const getNumData = (data) => {
  let temp = []
  return new Promise((resolve, reject) => {
    data.forEach((outerArray) => {
      return new Promise((resolve, reject) => {
        outerArray.forEach((number) => {
          return fetch(`http://127.0.0.1:8000/api/number?id=${number}`, {method: 'GET',})
          .then((response) => response.json())
          .then((responseJson) => {
            temp = this.state.seqDone.concat(responseJson[0]);
            this.setState({
              seqDone: temp
            })
            console.log(temp)
          })
        })
        if (this.state.seqDone) {
          console.log(this.state.seqDone)
          resolve(this.state.seqDone);
        } else {
          reject(Error('Sequences not found'));
        }
      })
    });
    if (this.state.seqDone) {
      console.log(this.state.seqDone)
      resolve(this.state.seqDone);
    } else {
      reject(Error('Sequences not found'));
    }
  })
}

最佳答案

你可以这样做

const nestedPromise = async (items = []) => {
  return await Promise.all(
    items.map(async item => {
      if (Array.isArray(item) && item.length) {
        return await nestedPromise(item)
      }
      // return await call to your function
      return 'response-' + item
    })
  )
}

const items = [ [4, 1, 2], [2, 5] ]
nestedPromise(items).then(results => {
  console.log(results)
})

Promise.all 接受函数数组作为参数,这些函数将异步执行。在你的情况下,你只需要递归地使用它

关于javascript - 嵌套 forEach 循环中的异步代码 - React Native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54298548/

相关文章:

c# - 将状态更新从 C++ 中的函数发送到 C#

jQuery on Change 函数中的 Javascript 异步函数返回未定义

c# - 我必须等待异步方法吗?

javascript - 如何创建多个 json 数组并在同一个函数中传递所有数组

javascript - 在我的待办事项列表中,删除/删除任务功能不起作用。有什么想法为什么?

javascript - GSAP 动画 : scale vs height and width

javascript - 如何从 Javascript readEntries() 检索文件内容

react-native - TouchableHighlight 的 child 在媒体上失去不透明样式

ios - 在 iOS 上自动填充后 react-native Keyboard.dismiss() 不工作

javascript - React Native - 居中 flexWrap 内容