아직 완료되지 않은 비동기 결과와 성공·실패 경로를 표현합니다.
Promise는 pending에서 fulfilled 또는 rejected로 한 번만 settled됩니다. then은 성공값을 이어 받고 catch는 앞 체인의 실패를 처리하며 finally는 결과와 관계없이 실행됩니다. then 안에서 Promise를 return해야 다음 단계가 완료를 기다립니다.
버튼을 누르면 화면에 먼저 처리 중...이 나타나고, wait(150)이 돌려준 Promise는 약 150밀리초 뒤 setTimeout이 resolve를 부를 때 이행됩니다. 첫 번째 then이 반환한 문자열 완료 데이터가 다음 then의 value로 넘어가 화면을 바꾸고, 실패가 없었으므로 catch는 건너뛴 채 finally가 정리 완료를 붙여 완료 데이터 · 정리 완료가 됩니다.
여러 Promise를 동시에 기다릴 때는 Promise.all을 씁니다. 모두 성공하면 결과를 넘긴 순서대로 배열에 담아 주지만 하나라도 실패하면 곧바로 그 이유로 거부되고, 실패와 상관없이 각 결과를 모두 받으려면 Promise.allSettled로 status가 fulfilled인지 rejected인지 확인합니다.
Promise를 만들기만 하고 return이나 await하지 않으면 호출한 쪽이 완료와 오류를 추적할 수 없습니다.
직접 바꿔보세요resolve 대신 reject하는 조건을 추가하고 catch와 finally 결과를 확인하세요.