Lanzo una excepción en el código asincrónico dentro de Promise. La excepción no se captura en el método catch()
let x = new Promise((resolve,reject)=>{setTimeout(()=>{throw new Error(5);},3000)}).catch((error)=>{console.log(error)})En cambio con este código:
let x = new Promise((resolve,reject)=>{setTimeout(()=>{reject( new Error(5));},3000)}).catch((error)=>{console.log(error)}) con el Error en el reject , es interceptado en el método catch(). (Ejecuté el código en la consola de mi navegador y observé este comportamiento) ¿Qué significa? Por lo tanto, si se lanza una excepción desde JSON.parse() y se intenta una excepción, ¿no se capturará? Y si es así, ¿cómo puedo manejar esta situación? Me refiero a esta situación, en el caso de que JSON.parse() inicie una excepción porque el formato del archivo devuelto por el servidor no tiene el formato adecuado como JSON:
function APIRequest(){ return new Promise((resolve,reject)=>{ let xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if (xhr.readyState == 4) { if (xhr.status >= 200 && xhr.status<299 || xhr.status == 304) { let response = JSON.parse(xhr.responseText); resolve(response); } else { reject('something is gone wrong') } } xhr.open('GET','URL_REQUEST); xhr.send(null); }); } (Sé que hay fetch() , es un ejemplo...) ¿Debería usar un try-catch antiguo alrededor de JSON.parse y en el bloque catch antiguo reject(error) ? ¿O hay una solución más limpia?