Aquí hay una cita sobre Promise.then() de MDN .
Valor de retorno
Una vez que se cumple o se rechaza una Promesa, la función del controlador respectivo (onFulfilled o onRejected) se llamará de forma asincrónica (programada en el bucle de subproceso actual). El comportamiento de la función del controlador sigue un conjunto específico de reglas. Si una función de controlador:
- devuelve un valor, la promesa devuelta entonces se resuelve con el valor devuelto como su valor.
- no devuelve nada, la promesa devuelta entonces se resuelve con un valor indefinido.
- arroja un error, la promesa devuelta por entonces se rechaza con el error arrojado como su valor.
- devuelve una promesa ya cumplida, la promesa devuelta entonces se cumple con el valor de esa promesa como su valor.
- devuelve una promesa ya rechazada, la promesa devuelta entonces se rechaza con el valor de esa promesa como su valor.
- devuelve otro objeto de promesa pendiente, la resolución/rechazo de la promesa devuelta para entonces será posterior a la resolución/rechazo de la promesa devuelta por el controlador. Además, el valor resuelto de la promesa devuelta en ese momento será el mismo que el valor resuelto de la promesa devuelta por el controlador.
Mi pregunta es ¿por qué el estado de promesa devuelto por .then está "resuelto" en lugar de "cumplido" en el segundo punto?
Parece tener un solo estado: cumplido. ¿Por qué no usar la palabra "cumplido" como el cuarto punto?
En el primer punto y el segundo punto, ambos estados de promesa regresan por .then está "resuelto".
Sobre el primer punto, en la mayoría de los casos, el estado se "cumple". Y si la devolución de llamada devuelve un theable, el estado de promesa puede ser "rechazado":
let thenableObj = { then(thenableRes, thenableRej) { thenableRej('thenable reject') } } let p = Promise.resolve('foo') p.then(() => { return thenableObj }) // Promise{<rejecter>: 'thenable reject'}Entonces, puedo aceptar la palabra "resuelto". Pero, en el segundo punto, no encuentro ningún ejemplo que demuestre que la palabra "resuelto" es más precisa que "cumplido".
Más específicamente, ¿puede dar algunos ejemplos para probar:
.then será rechazada cuando la devolución de llamada en .then no devuelva nada..then se "bloqueará" para que coincida con el estado de otra promesa cuando la devolución de llamada en .then no devuelva nada.si ninguno funciona, ¿por qué no usamos la palabra "cumplido" como cuarto punto que "resuelto"?