我的输入数据的格式如下:
[ [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/