Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套forEach循环中的异步代码-react native_Javascript_React Native_Asynchronous_Foreach - Fatal编程技术网

Javascript 嵌套forEach循环中的异步代码-react native

Javascript 嵌套forEach循环中的异步代码-react native,javascript,react-native,asynchronous,foreach,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 ] 我知道我在使用Promiss

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

[ [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 ]
我知道我在使用Promissions/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=[])=>{
回报等待承诺(
映射(异步项=>{
if(数组.isArray(项目)和项目长度){
返回等待嵌套承诺(项目)
}
//返回对函数的等待调用
返回“响应-”+项
})
)
}
常量项=[[4,1,2],[2,5]]
nestedPromise(项目)。然后(结果=>{
console.log(结果)

})
你可以这样做

const nestedPromise=async(items=[])=>{
回报等待承诺(
映射(异步项=>{
if(数组.isArray(项目)和项目长度){
返回等待嵌套承诺(项目)
}
//返回对函数的等待调用
返回“响应-”+项
})
)
}
常量项=[[4,1,2],[2,5]]
nestedPromise(项目)。然后(结果=>{
console.log(结果)

})
谢谢您的帮助。我最后也做了同样的事情,很高兴听到你找到了解决办法。你认为这是正确的答案吗?如果是的话,你能把它标记为正确的吗?谢谢你的帮助。我最后也做了同样的事情,很高兴听到你找到了解决办法。你认为这是正确的答案吗?你能把它标记为正确的吗?这是我最终采用的解决方案这是我最终采用的解决方案
  fetchData = (item) => {
    return fetch(`http://127.0.0.1:8000/api/pose?id=${item}`)
    .then (response => response.json())
  }

  constructArray = (items) => {
    Promise.all(items.map(nestedArray => {
    return Promise.all(nestedArray.map(this.fetchData))
    }
  ))
  .then((results) => {
    console.log(JSON.stringify(results))
  })

  }