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.

Manejo de errores: reintentar la recuperación de URL en caso de error hasta lograr el éxito

He examinado todas las preguntas relevantes aquí (como esta), pero aún no logro entender esta tarea MUY simple.
Así que intentando verificar números usando la API NumVerify. Todavía estamos en la licencia gratuita de APILAYER, por lo que a veces obtenemos el siguiente error:

La solicitud falló para https://apilayer.net y devolvió el código 500.

Me gustaría agregar un bucle para que el script intente nuevamente hasta recibir una respuesta apropiada. Aquí hay un fragmento basado en varias respuestas aquí:

function numverifylookup(mobilephone) {
    console.log("número de entrada:", mobilephone);
    var lookupUrl = "https://apilayer.net/api/validate?access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&number="+mobilephone+"&country_code=IL";
    try {
    var response = UrlFetchApp.fetch(lookupUrl);
    if (response) {//Comprobar el valor verdadero
     var json = response.getContentText();
    } else {
    Utilities.sleep(2000);
    continue;//Si "get" devuelve un valor falso, entonces continuar
  }
} catch(e) {
  continue;//Si hay un error, continuar bucle
}
    var data = JSON.parse(response);
}

Lamentablemente, todavía no funciona debido al siguiente error:

Continue debe estar dentro de un bucle. (line 10)

¿Alguna idea?
Creo que en realidad es mejor resolver esto utilizando muteHTTPexepctions, pero no pude hacer que funcionara.
¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El fragmento de código proporcionado intenta agregar un bucle para volver a intentar la llamada a la API hasta que se reciba una respuesta adecuada. Sin embargo, el mensaje de error “Continue debe estar dentro del bucle” indica que la instrucción continue no está dentro de un bucle.

    Para solucionar esto, es necesario envolver el fragmento de código dentro de un bucle que continúe hasta recibir una respuesta adecuada. Aquí tienes una versión actualizada del código:

    function numverifylookup(mobilephone) {
        console.log("número de entrada: ", mobilephone);
        var lookupUrl = "https://apilayer.net/api/validate?access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&number=" + mobilephone + "&country_code=IL";
        var response;
        while(true) {
            try {
                response = UrlFetchApp.fetch(lookupUrl);
                if (response) {//Comprobar si es un valor verdadero
                    var json = response.getContentText();
                    break;//Salir del bucle si se recibe una respuesta satisfactoria
                } else {
                    Utilities.sleep(2000);
                }
            } catch(e) {
                Utilities.sleep(2000);
            }
        }
        var data = JSON.parse(response);
        // procesar los datos aquí
    }
    

    Esta versión agrega un bucle while(true) que continúa indefinidamente hasta recibir una respuesta adecuada. Luego intenta recuperar los datos de la API y, si recibe un valor falso o un error, espera 2 segundos y vuelve a intentarlo. Una vez que recibe una respuesta adecuada, sale del bucle y analiza los datos.

    Este enfoque debería manejar los errores intermitentes 500 que ocurren debido al límite de licencia gratuita y seguir intentándolo hasta recibir una respuesta adecuada.

Comments are closed.