JavaScript Promises 사용 - AWS SDK for JavaScript

곧 AWS SDK for JavaScript(v2)에 대한 지원이 종료될 예정임을 알려드립니다. AWS SDK for JavaScript v3로 마이그레이션하실 것을 권장합니다. 마이그레이션 날짜, 추가 세부 정보 및 방법에 대한 자세한 내용은 링크된 공지 사항을 참조하세요.

JavaScript Promises 사용

AWS.Request.promise 메서드는 서비스 작업을 호출하고 콜백을 사용하지 않고 비동기식 흐름을 관리하는 방법을 제공합니다. Node.js 및 브라우저 스크립트에서 AWS.Request 객체는 콜백 함수 없이 서비스 작업이 호출된 경우 반환됩니다. 요청의 send 메서드를 호출하여 서비스를 호출할 수 있습니다.

그러나 AWS.Request.promise는 서비스 호출을 즉시 시작하고 응답 data 속성을 사용하여 이행되었거나 응답 error 속성을 사용하여 거부된 promise를 반환합니다.

var request = new AWS.EC2({apiVersion: '2014-10-01'}).describeInstances(); // create the promise object var promise = request.promise(); // handle promise's fulfilled/rejected states promise.then( function(data) { /* process the data */ }, function(error) { /* handle the error */ } );

다음 예제에서는 data 객체로 이행되었거나 error 객체로 거부된 promise를 반환합니다. promise를 사용하는 경우 단일 콜백이 오류 탐지를 담당하지 않습니다. 대신 요청 성공 또는 실패를 바탕으로 올바른 콜백이 호출됩니다.

var s3 = new AWS.S3({apiVersion: '2006-03-01', region: 'us-west-2'}); var params = { Bucket: 'bucket', Key: 'example2.txt', Body: 'Uploaded text using the promise-based method!' }; var putObjectPromise = s3.putObject(params).promise(); putObjectPromise.then(function(data) { console.log('Success'); }).catch(function(err) { console.log(err); });

여러 Promise 조정

경우에 따라 코드는 여러 비동기식 호출이 모두 성공적으로 반환된 경우에만 조치가 필요한 여러 비동기식 호출을 수행해야 합니다. promise를 사용하지 않고 개별 비동기 메서드 호출을 관리하는 경우 all 메서드를 사용하는 추가 promise를 생성할 수 있습니다. 이 메서드는 메서드에 전달한 promise 배열이 이행되는 경우 umbrella promise를 이행합니다. 콜백 함수는 all 메서드에 전달되는 promises의 값 배열로 전달됩니다.

다음 예에서 AWS Lambda 함수는 Amazon DynamoDB에 대한 비동기 직접 호출을 3개 수행해야 하는데 각 직접 호출에 대한 promise를 이행한 후에만 완료할 수 있습니다.

Promise.all([firstPromise, secondPromise, thirdPromise]).then(function(values) { console.log("Value 0 is " + values[0].toString); console.log("Value 1 is " + values[1].toString); console.log("Value 2 is " + values[2].toString); // return the result to the caller of the Lambda function callback(null, values); });

Promise에 대한 브라우저 및 Node.js 지원

기본 JavaScript promise(ECMAScript 2015)에 대한 지원은 모드가 실행되는 JavaScript 엔진 및 버전에 따라 달라집니다. 코드를 실행해야 하는 각 환경에서 JavaScript promise에 대한 지원을 확인하려면 GitHub에서 ECMAScript 호환성 표를 참조하세요.

기타 Promise 구현 사용

ECMAScript 2015의 기본 promise 구현 이외에 다음을 포함해 타사 promise 라이브러리도 사용할 수 있습니다.

이러한 선택적 promise 라이브러리는 ECMAScript 5 및 ECMAScript 2015에서 기본 promise 구현을 지원하지 않는 환경에서 코드를 실행해야 하는 경우 유용할 수 있습니다.

타사 promise 라이브러리를 사용하려면 전역 구성 객체의 setPromisesDependency 메서드를 호출하여 SDK에 대한 promise 종속성을 설정해야 합니다. 브라우저 스크립트에서 SDK를 로드하기 전에 타사 promise 라이브러리를 로드해야 합니다. 다음 예제에서는 bluebird promise 라이브러리에서 구현을 사용하도록 SDK가 구성되었습니다.

AWS.config.setPromisesDependency(require('bluebird'));

JavaScript 엔진의 기본 promise 구현을 사용하기 위해 반환하려면 setPromisesDependency를 다시 호출하여 라이브러리 이름 대신 null을 전달합니다.