En Angular, ¿cuál es la diferencia conceptual entre las funciones de error y captura para las promesas?

Finalmente conseguí que el error de la promesa Angular se resolviera, pero para mí fue contraintuitivo. Esperaba que los errores fueran manejados por la devolución de llamada fallida, pero en lugar de eso tuve que usar un retén.

No entiendo conceptualmente por qué se ejecuta la captura en lugar de la devolución de llamada de error.

Lo que esperaba:

SomeAsyncService.getData().then(function (result) {
    // The call is successful.
    // Code in this block throws an error.
}, function (error) {
    // I expected to handle errors here.
});

Lo que eventualmente funcionó.

SomeAsyncService.getData().then(function (result) {
    // The call is successful.
    // Code in this block throws an error.
}).catch(function (error) {
    // Where the error is actually caught. 
});

Si hay una manera más apropiada de manejar los errores de promesa, hágamelo saber.

Respuestas a la pregunta(3)

Su respuesta a la pregunta