Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

147
Visualizações
Solicitudes de recuperación dinámicas en paralelo

Me gustaría saber cómo puedo hacer solicitudes de recuperación dinámicas en paralelo. He estado intentando hacer esto durante 12 horas y no puedo resolverlo. Busqué en todas partes en Google y StackOverflow, realmente estoy cansado.

 for (const fileindex of filelist) { let dcmFilename = `slice_${fileindex}.dcm` slices.push( {index:fileindex, filename:dcmFilename} ) fd.append(dcmFilename, files[fileindex], dcmFilename); fd.append('slices', JSON.stringify(slices)); loopcount += 1 if (filecount == 24 || loopcount == filelist.length){ if (cursorPos !== false) { let scaleFactor = Tegaki.scaleFactor; cursorPos.x = parseInt(cursorPos.x / scaleFactor); cursorPos.y = parseInt(cursorPos.y / scaleFactor); fd.append('x', cursorPos.x); fd.append('y', cursorPos.y) } // Get layer id from index if (index !== -1) { type = this.layerTypes[index]['id'] } // switch mode from heuristic to pytorch vertebrae for vertebral bone if (type === 'vertebral-bone' ){ mode='PyTorch-Vertebrae' } // Post to endpoint let domain = window.location.origin.replace(':8080', ':5000') let list = await fetch(`${domain}/segment?mode=${mode}&type=${type}`, { method: 'POST', body: fd }) let result = await list.json() // do something with result // finish then continue the loop and create new body and send a new request // clear formdata and continue loop fd = new FormData() }

Tengo la siguiente solicitud de recuperación que envío, donde se genera el cuerpo para cada solicitud, nunca es el mismo cuerpo, las funciones generan dinámicamente el cuerpo. ¿Hay alguna manera de enviar todas las solicitudes a la vez, luego esperar a que devuelvan una respuesta y luego continuar con el resto de mi código?

about 4 years ago · Santiago Gelvez
1 Respostas
Responde à pergunta

0

En lugar del bucle for/of con await en él, puede usar filelist.map() con una devolución de llamada async .

Dado que .map() simplemente itera ciegamente la matriz sin esperar ninguna promesa devuelta, devolverá una matriz de promesas de todas las devoluciones de llamada async que llamó .map() . Esas promesas inicialmente no se cumplirán y todas las operaciones fetch() estarán "en curso" al mismo tiempo. Luego puede usar await Promise.all(...) en esa matriz de promesas devuelta para saber cuándo están listas:

 await Promise.all(filelist.map(async fileindex => { let dcmFilename = `slice_${fileindex}.dcm` slices.push({ index: fileindex, filename: dcmFilename }) fd.append(dcmFilename, files[fileindex], dcmFilename); fd.append('slices', JSON.stringify(slices)); loopcount += 1 if (filecount == 24 || loopcount == filelist.length) { if (cursorPos !== false) { let scaleFactor = Tegaki.scaleFactor; cursorPos.x = parseInt(cursorPos.x / scaleFactor); cursorPos.y = parseInt(cursorPos.y / scaleFactor); fd.append('x', cursorPos.x); fd.append('y', cursorPos.y) } // Get layer id from index if (index !== -1) { type = this.layerTypes[index]['id'] } // switch mode from heuristic to pytorch vertebrae for vertebral bone if (type === 'vertebral-bone') { mode = 'PyTorch-Vertebrae' } // Post to endpoint let domain = window.location.origin.replace(':8080', ':5000') let list = await fetch(`${domain}/segment?mode=${mode}&type=${type}`, { method: 'POST', body: fd }) let result = await list.json() // do something with result // finish then continue the loop and create new body and send a new request } }));

Nota n.º 1: dado que ahora está ejecutando varias operaciones de obtención en paralelo, cualquier código que procese sus resultados no debe compartir variables. Tiene algunas variables en este código que no muestran sus declaraciones. Esas declaraciones probablemente deberían estar dentro de este ciclo con let o const , de modo que haya una nueva variable para cada iteración del ciclo y no comparta variables entre iteraciones a menos que se suponga explícitamente que la variable se acumula entre iteraciones. Las variables sospechosas en este bucle sin declaración local que pueden verse afectadas por la operación en paralelo son filecount , loopcount , cursorPos , index , mode fd y type . No muestra todo el contexto de ejecución aquí, por lo que no podemos ver lo suficiente como para hacer una recomendación completa sobre estos.

Nota #2: El código que contiene este if (filecount == 24 || loopcount == filelist.length) parece que puede ser propenso a problemas. Si está tratando de ejecutar algún código cuando se completan todas las iteraciones, sería mejor ejecutar ese código después de Promise.all() que tratar de detectar cuándo finalizó su última iteración. Recuerde, sus iteraciones no necesariamente procederán en orden ahora porque las está ejecutando en paralelo. Se lanzarán en orden, pero no necesariamente completos en orden.

about 4 years ago · Santiago Gelvez Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda