프라미스
프라미스는 콜백의 단점을 해결하려는 시도 속에서 만들어졌습니다. 프라미스는 간혹 번거롭게 느껴질 수 있지만, 일반적으로 안전하고 관리하기 쉬운 코드를 만들 수 있게 됩니다.
프라미스가 콜백을 대체하는 것은 아닙니다. 사실 프라미스에서도 콜백을 사용합니다. 프라미스는 콜백을 예측 가능한 패턴으로 사용할 수 있게 하며, 프라미스 없이 콜백만 사용했을 때 나타날 수 있는 엉뚱한 현상이나 찾기 힘든 버그를 상당수 해결합니다.
프라미스의 기본 개념은 간단합니다. 프라미스 기반 비동기적 함수를 호출하면 그 함수는 Promise 인스턴스를 반환합니다. 프라미스는 성공fulfilled 하거나, 실패rejected하거나 단 두 가지뿐입니다. 프라미스는 성공 혹은 실패 둘 중 하나만 일어난다고 확신할 수 있습니다. 성공한 프라미스가 나중에 실패하는 일 같은 건 절대 없습니다. 또한, 성공이든 실패는 단 한 번만 일어납니다. 프라미스가 성공하거나 실패하면 그 프라미스를 결정됐다settled고 합니다.
프라미스는 객체이므로 어디든 전달할 수 있다는 점도 콜백에 비해 간편한 장점입니다. 비동기적 처리를 여기서 하지 않고 다른 함수에서(또는 다른 동료가) 처리하게 하고 싶다면 프라미스를 넘기기만 하면 됩니다. 마치 음식점에서 받은 예약 호출기를 친구에게 맡기는 것과 비슷합니다. 예약한 인원이 때맞춰 오기만 한다면, 음식점에서는 누가 호출기를 들고 있든 상관없으니까요.