

AWS SDK for JavaScript v2가 지원 종료에 도달했습니다. [AWS SDK for JavaScript v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/)로 마이그레이션하실 것을 권장합니다. 마이그레이션 방법에 대한 자세한 내용은 해당 [공지 사항](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)을 참조하세요.

# JavaScript Promises 사용
<a name="using-promises"></a>

`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 조정
<a name="multiple-promises"></a>

경우에 따라 코드는 여러 비동기식 호출이 모두 성공적으로 반환된 경우에만 조치가 필요한 여러 비동기식 호출을 수행해야 합니다. 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 지원
<a name="browser-node-promise-support"></a>

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

## 기타 Promise 구현 사용
<a name="using-other-promise-implementations"></a>

ECMAScript 2015의 기본 promise 구현 이외에 다음을 포함해 타사 promise 라이브러리도 사용할 수 있습니다.
+ [bluebird](http://bluebirdjs.com)
+ [RSVP](https://github.com/tildeio/rsvp.js/)
+ [Q](https://github.com/kriskowal/q).

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

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

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

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