Búsqueda de sitios web

javascript - ¿Es más eficiente usar varios bucles for por sí mismos o delegar la lógica a promesas?


Escenario siguiente: Una función recibe 3 arreglos de cierta longitud, cada uno de ellos necesita ser recorrido para encontrar un objeto que coincida. Cuando se encuentra el objeto, el bucle for se rompe y el siguiente no se llama. Los arreglos no se pueden fusionar en este caso. Básicamente así:

for (let i = 0; i < array1.length; i++) {
  if (array1[i].id == matchingID) {
    returnValue = array1[i];
    break;
  }
}
if (!returnValue) {
  for (let i = 0; i < array2.length; i++) {
    if (array2[i].id == matchingID) {
      returnValue = array2[i];
      break;
    }
  }
}
if (!returnValue) {
  for (let i = 0; i < array3.length; i++) {
    if (array3[i].id == matchingID) {
      returnValue = array3[i];
      break;
    }
  }
}
return returnValue;

¿Sería más eficiente usar promesas en este caso, ya que de esa manera todos los bucles for podrían ejecutarse al mismo tiempo? Así, con cada llamada a función realizando uno de los bucles for (y resolviendo el valor encontrado) del ejemplo anterior:

return new Promise((resolve) => {
  this.findMatchingIDInArray1(array1)
    .then(() => resolve(returnValue));
  this.findMatchingIDInArray2(array2)
    .then(() => resolve(returnValue));
  this.findMatchingIDInArray3(array3)
    .then(() => resolve(returnValue));
}) 

¿Qué manera es más eficiente? ¿Hay una mejor manera de hacer esto? ¡Gracias por tu ayuda!

Respuesta #1

¿Sería más eficiente usar promesas en este caso, ya que de esa manera todos los bucles for podrían trabajarse al mismo tiempo?

No, entendiste mal lo que hacen las promesas. Son una herramienta para facilitar el manejo de código asíncrono. No hay código asíncrono en tu caso de uso, así que no puedes hacer uso de promesas aquí. Las promesas no "hacen" nada asíncrono, ni siquiera permiten un paralelismo similar al de la multihilo.

Respuesta #2

¿Sería más eficiente usar promesas en este caso, ya que de esa manera todos los bucles for podrían trabajarse al mismo tiempo?

No, porque las promesas no hacen que nada sea asíncrono o paralelo. Solo se pueden usar para observar cosas que ya son asíncronas o paralelas.

Todo lo que lanzar promesas en ese código haría sería cambiar cuándo se bloquea el hilo principal y añadir sobrecarga.

Si necesitas descargar o paralelizar tareas computacionales de larga duración, mira los workers web.