LHJ

I'm a FE developer.

14.3 프로미스

20 May 2020 » js_lj

14.3 프로미스

프로미스는 콜백의 단점을 해결하려는 시도 속에서 만들어졌습니다.
프로미스는 간혹 번거롭게 느껴질 수 잇지만, 일반적으로 안전하고 관리하기 쉬운 코드를 만들 수 있게 됩니다.

프로미스가 콜백을 대체하는 것은 아닙니다.
사실 프로미스에서도 콜백을 사용합니다.
프로미스는 콜백을 예측 가능한 패턴으로 사용할 수 있게 하며, 프로미스 없이 콜백만 사용했을 때 나타날 수 있는 엉뚱한 현상이나 찾기 힘든 버그를 상당 수 해결합니다.

프로미스의 기본 개념은 간단합니다.
프로미스 기반 비동기적 함수를 호출하면 그 함수는 Promise 인스턴스를 반환합니다.
프로미스는 성공(fullfilled)하거나, 실패(rejected)하거나 단 두 가지 뿐입니다.
프로미스는 성공 혹은 실패 둘 중 하나만 일어난다고 확신할 수 있습니다.
성공한 프로미스가 나중에 실패하는 일 같은 건 절대 없습니다.
또한, 성공이든 실패든 단 한 번만 일어납니다.
프로미스가 성공하거나 실패하면 그 프로미스를 결정됐다(settled)고 합니다.

프로미스는 객체이므로 어디든 전달할 수 있다는 점도 콜백에 비해 간편한 장점입니다.
비동기적 처리를 여기서 하지 않고 다른 함수에서(또는 다른 동료가) 처리하게 하고 싶다면 프로미스를 넘기기만 하면 됩니다.
마치 음식점에서 받은 예약 호출기를 친구에게 맡기는 것과 비슷합니다.
예약한 인원이 때맞춰 오기만 한다면, 음식점에서는 누가 호출기를 들고 있든 상관 없으니까요.