Reactjs 多次执行handleClick
我有一个按钮,当它被点击时,它会发出POST请求。在等待响应时,我有一个正在加载的动画。但是现在我希望这个按钮不只是发出一个post请求,我希望它一次点击就发出100个post请求 我的纽扣Reactjs 多次执行handleClick,reactjs,promise,Reactjs,Promise,我有一个按钮,当它被点击时,它会发出POST请求。在等待响应时,我有一个正在加载的动画。但是现在我希望这个按钮不只是发出一个post请求,我希望它一次点击就发出100个post请求 我的纽扣 <Form> <Form.Group> <Button variant='success' className='button' onClick={handleClick} id='create'&
<Form>
<Form.Group>
<Button variant='success' className='button' onClick={handleClick} id='create'>Create Sales Order</Button>
</Form.Group>
</Form>
我的钩。在这个钩子中,我试图将createSalesOrder函数的内容放在一个循环中,但这个循环不起作用,因为它会中断加载动画(加载动画不会停止)
您可以使用等待一个或多个承诺完成。它返回一个“包装”所有其他承诺的单个承诺,这些承诺在所有承诺都已解决时将解决,或者在任何一个承诺被拒绝时立即拒绝
如果您想等待所有承诺完成,即使有些承诺被拒绝,那么使用
此外,请记住,承诺将以从服务器返回的任何顺序得到解决/拒绝,而不一定是以发送的顺序。这意味着,你所创建的第一个命令完全可以在中间的某个地方解决,你创建的最后一个命令将首先被解析,并且,如果你重复逻辑,它们解析的顺序将是不同的。对不起,到底是什么问题?问题是你想多次点击按钮,但在创建所有订单之前都要加载它?你有没有试着用它取100次?嗨,汤姆,我编辑了原始问题。问题是我想点击按钮1次,让它完成100个post请求@Pawel不,我没有,老实说,我真的不明白如何承诺。所有的工作如果你只是想做更多的请求,只需在
createSalesOrder
func中设置一个循环,就像``异步函数createSalesOrder(){let newValue=[…value]for(let I=0;I<100;I++){const res wait axios.post(')newValue.push(res.data)}return newValue}``用另一个注释更新了我的答案。如果您需要按照顺序解决承诺,第二个承诺等待第一个承诺解决,等等,那么您需要一个非常不同的解决方案。
<BeatLoader
css={override}
size={30}
// size={"150px"} this also works
color='#b51a82'
loading={isLoading}
/>
async function handleClick (event) {
switch (event.target.id) {
case 'create':
setLoading(true)
break
case 'delete':
// code for delete case
break
default:
console.log('click didnt work')
}
}
useEffect(() => {
async function createSalesOrder () {
const res = await axios.post('http://localhost:5000/')
console.log(res)
setValue([...value, res.data])
return (res)
}
if (isLoading) {
createSalesOrder().then(() => {
setLoading(false)
})
}
}, [isLoading])
useEffect(() => {
async function createSalesOrder () {
const res = await axios.post('http://localhost:5000/')
console.log(res)
setValue([...value, res.data])
return (res)
}
if (isLoading) {
const finished = _ => setLoading(false);
// Wait for all of the sales orders to finish
Promise.all(
// Create an array of 100 promises:
// Quickly create an array with 100 entries
[...Array(100).keys()].map(
// For each entry, submit a request to create a sales order
// and return a promise
createSalesOrder
)
).then(
// When all of the promises have resolved, end your animation:
finished,
// Make sure you stop the animation even if an error occurred:
finished
);
}
}, [isLoading])