Cuando tengo:
try { array.forEach(items => { //do something //here something is going wrong }) res.status(200).json({ success: true }) } catch (err) { res.status(400).json({ message: err.message }) }El error no se detecta: obtuve 200 respuestas, pero puedo ver la aplicación bloqueada y en la terminal tengo un error. Pero este error no es detectado por el bloque catch(err).
Pero si tengo For of loop obtengo 400 respuestas.
Erros es lo mismo: en forEach no se detecta y la respuesta está bien, pero en for of loop se detectan errores y tengo 400 respuestas con error. ¿Por qué? ¿Por qué no puedo detectar el error en forEach y enviar 400 res por bloque de captura?
Respuesta corta:
Esto está diseñado para JS forEach.
uno mas largo:
Nota: No hay forma de detener o romper un bucle forEach() que no sea lanzando una excepción. Si necesita tal comportamiento, el método forEach() es la herramienta incorrecta.
Desde MDN Web Docs Array.prototype.forEach()
Por cierto, tampoco espera la promesa.
forEach no espera promesas. Asegúrese de conocer las implicaciones al usar promesas (o funciones asíncronas) como forEach callback.
En suma,
forEach , use for o while