gpt4 book ai didi

javascript - axios随机请求数

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:23:13 25 4
gpt4 key购买 nike

我需要用 Axios 发出多个请求,但我不知道有多少,请求的数量是完全随机的,可能是 0 或 1 或 9182379,在它们都完成后我需要做一些事情,就像现在我必须更新我的状态(对象数组)。

你知道我该怎么做吗??

let oldTickets = [...this.state.playedTickets];
let length = oldTickets.length;
let newTickets = [];

for (let index = 0; index < length; index++) {
let currentTicket = oldTickets[index];

// just imported function that returns axios.get call
checkTickets(currentTicket.ticketNumber)
.then(data => {

let newTicket = {
bla: bla
}

newTickets.push(newTicket);
this.setState({playedTickets: newTickets})

})
.catch(err => {
console.log(err);
})

}

这工作正常,但我知道它不好,所以我正在寻找更好的解决方案!

最佳答案

after they are all done I need to do something

您可以将数组映射到 promises 并使用 Promise.all :

Promise.all( // executes all requests in parallel
this.state.playedTickets.map(({ ticketNumber }) => checkTickets(ticketNumber))
).then(playedTickets => { // or declare function as `async` and use `await`
// executed only after all requests resolved
console.log('tickets', playedTickets);
this.setState({ playedTickets });
}).catch(e => console.log(e)); // executed as soon as one request fails

编辑:

continue awaiting for all requests even if some failed, and set the state based on the results of the successful requests

要实现这一点,只需在传递给 Promise.all 之前捕获错误:

Promise.all(
this.state.playedTickets.map(({ ticketNumber }) =>
checkTickets(ticketNumber).catch(console.log)
)
).then(playedTickets => {
console.log('tickets', playedTickets);
this.setState({ playedTickets });
});

失败的请求将undefined作为数组中的值。
如果需要,您可以使用

过滤掉它们
const validTickets = playedTickets.filter(ticket => ticket !== undefined) 

关于javascript - axios随机请求数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50331961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com