then((value) => any | Promise<any>)

→ then의 value는 resolve 값을 넘겨 받아 처리하는데,

return 이 any 이면 any(void, object, any) 이거나

return 이 Promise 이면 해당 Promise 에서 resolve 로 return 값을 할당 받는다.

마지막으로 return 이 무엇이든 최종적으로 Promise 객체를 반환한다.

then 의 callback 함수는 onfulfilled?, onrejected? 가 존재한다.

onfulfilled? : (value: any)  => any | PromiseLike<any>

onrejected?  : (reason: any) => PromiseLike<never>

여기서 onfulfilled callback 함수는 return 값으로 Promise 객체가 올 수 있다. ★

const fetchNumber = new Promise((resolve, reject) => {
    setTimeout(() => resolve(1), 1000);
});
fetchNumber
    .then((num) => num * 2)
    .then((num) => num * 3)
    .then((num) => {
        return new Promise((resolve, reject) => {
            setTimeout(() => resolve(num - 1), 1000);
        }); // callback 함수 onfulfilled 의 Promise 객체 return
    })
    .then((num) => console.log(num)); // 5