En Node.js, a veces por algunos errores, una respuesta tarda más de lo habitual y en este caso, en lugar de esperar un periodo incierto, podemos devolver un error o algún mensaje si no se recibe la respuesta en 1 minuto.
Problema: Supongamos que hay una función ‘helloGeeks’ que en respuesta devuelve una promesa, luego el valor devuelto se registra usando la palabra clave ‘then’ . La función ‘helloGeeks’ tarda demasiado en dar una respuesta y este proceso detiene el flujo de ejecución.
Javascript
let helloGeeks = new Promise((resolve, reject) => { setTimeout(resolve, 120000, 'Hello Geeks!') }) helloGeeks.then((value) => { console.log(value) })
Producción:
Enfoque 1: Vamos a crear una función ‘defaultResponse’ que en respuesta devuelve una promesa. Queremos ejecutar esta función en lugar de la función que tarda más de lo habitual, en este caso, es la función ‘helloGeeks’ que tarda más de 1 minuto en responder.
Javascript
let defaultResponse = new Promise((resolve, reject) => { setTimeout(resolve, 60000, 'Response timeout!'); })
Ahora, tenemos que usar el método ‘Promise.race’ para competir con la promesa, este método toma diferentes promesas como argumentos y ejecuta la que lleva menos tiempo, por lo que pasamos tanto ‘helloGeeks’ como ‘defaultResponse’ y ejecuta ‘helloGeeks ‘ si tarda menos de 1 minuto; de lo contrario, ejecuta la ‘respuesta predeterminada’, ya que solo tarda 1 minuto.
Javascript
Promise.race([helloGeeks, defaultResponse]).then((value) => { console.log(value); });
Ejemplo: este es el código en ejecución completo que usa el enfoque anterior para resolver el problema.
Javascript
let helloGeeks = new Promise((resolve, reject) => { setTimeout(resolve, 120000, 'Hello Geeks!') }) let defaultResponse = new Promise((resolve, reject) => { setTimeout(resolve, 60000, 'Response timeout!'); }) Promise.race([helloGeeks, defaultResponse]).then((value) => { console.log(value); });
Producción:
Enfoque 2: Vamos a crear una función ‘defaultResponse’ que ejecuta la declaración de registro después de 1 min. Queremos ejecutar esta función en lugar de la función que tarda más de 1 minuto, en este caso, es la función ‘helloGeeks’ que tarda más de 1 minuto en responder. Si la función ‘helloGeeks’ toma más tiempo, entonces se ejecuta la función ‘defaultResponse’ y se detiene el flujo de ejecución.
Ejemplo: este es el código en ejecución completo que usa el enfoque anterior para resolver el problema.
Javascript
let defaultResponse = () => { setTimeout(() => { console.log('Response timeout!'); process.exit(); }, 2000); } let helloGeeks = () => { setTimeout(() => { console.log('Hello Geeks!'); }, 6000); } defaultResponse(); helloGeeks();
Producción: