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.

Cómo omitir o ignorar un error de red en JavaScript

Quiero verificar el estado de algunas páginas web y escribir los siguientes códigos. Utilizo “phantomjs.exe –web-security=false test.js” en la terminal para ejecutar el siguiente código. Si el estado de la red es normal, entonces todo va bien. Si el estado de la red es anormal, el código se detendrá y recibirá un mensaje de error: “PHANTOM ERROR: NETWORK_ERR: XMLHttpRequest Exception 101: Ocurrió un error de red en las solicitudes síncronas.”

Espero que cuando el estado de la red sea anormal, el código pueda continuar detectando la siguiente página web en lugar de detenerse. He estado buscando en Internet durante mucho tiempo y no sé cómo solucionarlo. Espero que alguien pueda ayudarme.

var urls = new Array("www.bueno.com", "www.malo.com", "www.bueno.com");
var fs = require('fs');
var request;

if (window.XMLHttpRequest)
    request = new XMLHttpRequest();
else
    request = new ActiveXObject("Microsoft.XMLHTTP");

request.onload = function (e) {
    if (request.readyState === 4) {
         console.log(request.status);
    }
};

phantom.onError = function(msg, trace) {
    var msgStack = ['PHANTOM ERROR: ' + msg];
    if (trace && trace.length) {
      msgStack.push('TRACE:');
      trace.forEach(function(t) {
        msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (en función ' + t.function +')' : ''));
      });
    }
    console.log(msgStack.join('\n'));
 };

for (i = 0; i < urls.length; i++) {
    console.log(urls[i]);
    request.open('GET', "https://" + urls[i], false);
    request.send();
    fs.write("resultado.txt", urls[i] + ',' + request.status + '\n', 'a');
}

phantom.exit();
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución para manejar el error de red y continuar detectando la siguiente página web es envolver la función de envío de solicitud en un bloque try-catch. Cuando ocurre un error, se captura el error y se registra el mensaje de error sin detener el código. Aquí está el código modificado:

    var urls = new Array("www.bueno.com", "www.malo.com", "www.bueno.com");
    var fs = require('fs');
    var request;
    
    if (window.XMLHttpRequest)
        request = new XMLHttpRequest();
    else
        request = new ActiveXObject("Microsoft.XMLHTTP");
    
    request.onload = function (e) {
        if (request.readyState === 4) {
             console.log(request.status);
        }
    };
    
    phantom.onError = function (msg, trace) {
        var msgStack = ['ERROR DE PHANTOM: ' + msg];
        if (trace && trace.length) {
            msgStack.push('RUTA:');
            trace.forEach(function (t) {
                msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (en la función ' + t.function + ')' : ''));
            });
        }
        console.log(msgStack.join('\n'));
    };
    
    for (i = 0; i < urls.length; i++) {
        console.log(urls[i]);
        request.open('GET', "https://" + urls[i], false);
        try {
            request.send();
        } catch (error) {
            console.log('Error:', error.message);
            continue; // saltar a la siguiente url
        }
        fs.write('result.txt', urls[i] + ', ' + request.status + '\n', 'a');
    }
    
    phantom.exit();
    

    En este código modificado, agregamos un bloque try-catch para capturar cualquier error que pueda ocurrir durante la solicitud de red. Si ocurre un error, registramos el mensaje de error y usamos la palabra clave continue para omitir la siguiente url y continuar el bucle. Esto permite que el código siga ejecutándose incluso si algunas urls no son accesibles debido a errores de red.

    Tenga en cuenta que este código sigue registrando el mensaje de error usando la función phantom.onError, por lo que todavía puede ver los mensajes de error en la consola. Sin embargo, el mensaje de error no detiene la ejecución del código ni la detección de la siguiente url.

Comments are closed.