프로미스 사용하기
저는 에어데스크라는 확장 프로그램을 만들고 있습니다. 새로운 기능을 만드는데 API 문서를 읽다가 이곳저곳 영어로 읽다보니 정리가 안 되는것 같아 통째로 번역했습니다. 번역은 크게 틀리진 않았을 겁니다만 혹시라도 이상한 부분을 찾으시면 댓글로 알려주세요!
첫번째 글: [번역] 구글 API 클라이언트 라이브러리 - 1
두번째 글: [번역] 구글 API 클라이언트 라이브러리 - 2
세번째 글: [번역] 구글 API 클라이언트 라이브러리 - 3
원문 링크:
자바스크립트의 프로미스는 비동기 명령의 결과를 표현합니다. 프로미스는 3가지 상태 중 하나일 수 있습니다. pending, fullfilled 또는 rejected입니다. 프로미스의 fullfilled value 또는 rejection reason에 엑세스하기 위해 당신의 핸들러를 프로미스의 then 메소드를 이용해 등록해야합니다.
자바스크립트 클라이언트 라이브러리는 Promises/A+에 일치하는 인터페이스를 제공합니다.
우리는 당신이 콜백을 사용하기보단 프로미스를 쓰기를 강력히 추천합니다.
프로미스 인터페이스로 만들어진 요청은 RESTful입니다.
프로미스를 사용하면 우아한 에러 핸들링과 편한 체이닝을 할 수 있습니다.
또한 오래된 콜백 인터페이스에서 생긴 다양한 작은 버그와 불일치들을 쉽게 고칠 수 있습니다.
요청은 gapi.client.request, gapi.client,newBatch와 등록된 API 메소드들("thenable")을 통해 생성됩니다. 또한 gapi.client.load는 만약 콜백 어규먼트가 제공되지 않을 때 프로미스를 리턴합니다. 각각의 요청은 3개의 옵션 파라메터를 가진 then(opt_onFulfilled, opt_onRejected, opt_context)메소드를 가지고 있습니다.
알려드립니다: 라이브러리 안의 프로미스는 lazily resolve됩니다. 이는 then이 호출되기 전까지 실제로 네트워크 요청이 만들어지지 않는다는 의미입니다. 한 번 프로미스가 resolve되거나 값을 가지고 reject되면, 값은 바뀌지 않습니다.
알려드립니다: 우린 언제나 당신이 rejection 핸들러를 제공하는걸 강력하게 추천합니다. 당신의 코드가 다루지 못하는 Rejection은 top-level exceptions로 전파될 것입니다. Rejection reason은 애플리케이션 단계의 에러와 네트워크 에러를 포함할 수 있습니다.
Fullfilled 응답과 애플리케이션 단계 rejections는 아래의 형태를 따릅니다.
단일 요청 예제:
당신이 batch에 추가할 의도를 가지고 요청을 생성할 때는 batch에 추가되기 전까지 then 메소드를 호출하지 마십시오. 만약 then 메소드가 요청이 추가되기 전에 호출되면, 요청은 batch 대신 즉시 보내집니다. 당신은 요청들의 then 메소드를 batch의 then 전 또는 후에 호출 할 수 있습니다. batch 오브젝트가 프로미스로 취급될 때 옵션 callback의 add 메소드는 효과가 없습니다.
예제:
컨텍스트 포인트의 핸들러 안의 this로 설정하므로써 컨텍스트 값을 프로미스 핸들러로 바인딩하는 것과 컨텍스트 파라미터를 전달하는 것은 같습니다.
예제:
fullfilled 프로미스 값의 result 파라메터는 execute의 콜백 첫번째 파라미터와 같습니다. 당신의 코드를 업데이트하여 프로미스를 사용하기 위해선 아래의 before, after 예제처럼 바꾸십시오.
다음의 코드는 콜백을 사용한 예제를 보여줍니다:
위 코드를 프로미스를 사용해 다시 쓰면 아래와 같습니다: