Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

110
Views
Recorra una serie de ID y haga una solicitud por separado cada vez

Tengo un punto final de api como este y necesito realizar una solicitud de venta a este punto final.

 api/user-group/{id}/invite/{userId}

El problema que tengo es que mi formulario contiene una lista múltiple, una lista de selección de reacción que permite a los usuarios seleccionar tantos grupos como quieran y, por lo tanto, cada vez que un usuario selecciona un grupo, almaceno la identificación de los grupos en el estado local pero mi api el punto final solo acepta una identificación de grupo. Creo que la solución es pasar por encima de los ID de grupo y hacer solicitudes separadas. ¿Alguien puede guiarme sobre cómo lograr esta solución o hay una solución mejor?

Mi código:

 const AddUserToGroupPage = () => { const [currentUserId, setCurrentUserId] = useState(''); const [GroupIds, setGroupIds] = useState([]); const { inviteUserToGroup } = useUserGroupApi(); const InviteExistingUser = async () => { const body = {}; const res = await inviteUserToGroup({ id: groupIds, body, userId: currentUserId, }); return res; }; const onGroupsSelected = (selected) => { if (selected) { setGroupIds(selected.map((select) => select.value)); } }; return ( <> <Select name="userGroups" label="User Groups" placeholder="Select as many groups as you want" id="userGroups" defaultOptions options={groups} isMulti onSelectChange={onGroupsSelected} /> </> ) }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Creo que puedes lograr lo que quieres así:

 const InviteExistingUser = async () => { const body = {}; return await Promise.all( groupIds.map((groupID) => { return inviteUserToGroup({ body, id: groupID, userId: currentUserId, }); }), ); };

En este código, la llamada a groupIds.map() devolverá una lista de Promesas, cada una de las cuales se resuelve con el valor de retorno de una llamada a inviteUserToGroup (un resultado para cada ID de grupo).

Luego puede pasar esa lista a Promise.all , que devuelve una Promesa que se resuelve en una lista de resultados. Básicamente, pasa de Promise<result>[] (una lista de promesas) a Promise<result[]> (una promesa para una lista).

Luego puede await esa Promesa, momento en el que termina con una lista de resultados para todas las llamadas a inviteUserToGroup .

about 4 years ago · Juan Pablo Isaza Report

0

Tienes 3 opciones:

1. disparar una sola solicitud cada vez

 GroupIds.forEach(g => { const body = {}; const res = await inviteUserToGroup({ id: g.id, body, userId: currentUserId, }); // save response setGroupsInfo(prev => [...prev, res] })

2. disparar todas las solicitudes juntas

 const requests = GroupIds.map(g => { return inviteUserToGroup({ id: g.id, body, userId: currentUserId, }); }) Promise.all(requests).then(resArray => { setGroupsInfo(resArray) })

3. Encienda un montón (tal vez 5) de solicitudes y espere hasta que terminen y luego encienda más una y así sucesivamente.

 // take 5 each time for(let i = 0; i < GroupIds.length; i += 5){ const subGroupsIds = GroupIds.slice(i, i + 5); // fire 5 requests const requests = subGroupsIds.map(g => { return inviteUserToGroup({ id: g.id, body, userId: currentUserId, }); }) // wait for the 5 requests const resArr = await Promise.all(requests); setGroupsInfo(prev => [...prev, ...resArr]); }

la segunda opción es la peor, ya que puedes tener tantos grupos y no puedes solicitarlos todos al mismo tiempo.

la tercera opción es la óptima pero su implementación no es sencilla.

la primera opción es fácil y pero en gran número de grupos será lento.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!