then promises inside errors error catch javascript promise es6-promise catch-block

javascript - promises - El rechazo de promesa() provoca una advertencia de "No capturado(en promesa)"



promise then (1)

Esto sucede porque no adjunta un controlador de captura a la promesa devuelta por el primer método de then , que por lo tanto no tiene controlador para cuando la promesa se rechaza. Tiene uno para la promesa p en la última línea, pero no para la promesa encadenada , devuelta por el método de then , en la línea anterior.

Como se agregó correctamente en los comentarios a continuación, cuando no se proporciona un controlador de captura (o no es una función), el http://www.ecma-international.org/ecma-262/6.0/index.html#sec-performpromisethen el error. Dentro de una cadena de promesa, este error se puede capturar en la línea con un método de devolución de llamada de catch , pero si no hay ninguno, el motor de JavaScript manejará el error como con cualquier otro error no detectado, y aplicará el controlador predeterminado en tales circunstancias, lo que resulta En la salida se ve en la consola.

Para evitar esto, .catch método .catch a la promesa devuelta por el primero, así:

p.then( result => console.log(''Fulfilled'')) .catch( error => console.log(error) );

Una vez que se recibe una devolución de llamada de reject() promesa reject() aparece un mensaje de advertencia "Sin captura (en promesa)" en la consola de Chrome. No puedo envolver mi cabeza en torno a la razón detrás de esto, ni cómo deshacerme de ella.

var p = new Promise((resolve, reject) => { setTimeout(() => { var isItFulfilled = false isItFulfilled ? resolve(''!Resolved'') : reject(''!Rejected'') }, 1000) }) p.then(result => console.log(result)) p.catch(error => console.log(error))

Advertencia:

Editar:

Descubrí que si el controlador onRejected no se proporciona explícitamente al .then(onResolved, onRejected) , JS proporcionará automáticamente uno implícito. Se ve así: (err) => throw err . El controlador generado automáticamente lanzará en su turno.

Referencia:

Si IsCallable ( onRejected ) `es falso , entonces
Deje que OnRejected sea ​​" Thrower ".

http://www.ecma-international.org/ecma-262/6.0/index.html#sec-performpromisethen