es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es posible que el bucle for itere por tiempo en Node.js?

Tengo una lista de órdenes y conductores, quiero asignarle una orden a un conductor. Si el conductor rechaza la orden (por ejemplo: Id=1), la misma orden pasa al siguiente conductor después de 30 segundos o 1 minuto. Por favor, guíeme.
He intentado esto pero no está funcionando correctamente en mi caso.

let orders = [1, 2, 3, 4, 5, ..., 100];
let drivers = [1, 2, 3, 4, ..., 50];

for (let order of orders) {
  for (let driver of drivers) {
    // ejecutar la segunda iteración después de 30 segundos o un minuto
  }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para asignar un pedido a un conductor, puedes utilizar un bucle for anidado. Sin embargo, para manejar el caso en el que un conductor rechaza un pedido, puedes usar una función setTimeout para retrasar la próxima iteración durante 30 segundos o un minuto. Aquí hay una posible solución:

    let orders = [1, 2, 3, 4, 5, ..., 100];
    let drivers = [1, 2, 3, 4, ..., 50];
    
    for (let order of orders) {
      let assigned = false;
      for (let driver of drivers) {
        // comprueba si el conductor está disponible
        if (assignedDrivers.includes(driver)) {
          continue; // salta los conductores ya asignados
        }
    
        // asigna la orden al conductor
        asignarPedidoAlConductor(order, driver);
        assignedDrivers.push(driver);
        assigned = true;
        break; // sale del bucle interno
      }
      if (!assigned) {
        // maneja el caso en el que no hay conductor disponible
        console.log("No hay conductor disponible para el pedido ", order);
      }
      setTimeout(() => {}, 30000); // espera 30 segundos antes de la próxima iteración
    }
    

    En esta solución, utilizamos una variable “assignedDrivers” para llevar un registro de qué conductores ya han sido asignados a un pedido. También utilizamos una variable booleana “assigned” para comprobar si se ha asignado correctamente un pedido a un conductor. Si no hay conductor disponible para un pedido, imprimimos un mensaje en la consola. Finalmente, utilizamos “setTimeout” para retrasar la próxima iteración durante 30 segundos.

Comments are closed.