

# async および await を使用します。
<a name="async-await-syntax"></a>

CloudFront Functions JavaScript ランタイム関数 2.0 には、`Promise` オブジェクトを処理するための `async` および `await` 構文が用意されています。Promise は遅延した結果を表し、`async` とマークされた関数のキーワード `await` を使用してアクセスできます。さまざまな新しい WebCrypto 関数が Promise を使用しています。

`Promise` オブジェクトの詳細については、「[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)」を参照してください。

**注記**  
次のコードサンプルでは、JavaScript ランタイム 2.0 を使用する必要があります。  
`await` は `async` 関数内でのみ使用できます。`async` 引数とクロージャはサポートされていません。

```
async function answer() {
    return 42;
}

// Note: async, await can be used only inside an async function. async arguments and closures are not supported.

async function handler(event) {
    // var answer_value = answer(); // returns Promise, not a 42 value
    let answer_value = await answer(); // resolves Promise, 42
    console.log("Answer"+answer_value);
    event.request.headers['answer'] = { value : ""+answer_value };
    return event.request;
}
```

次の JavaScript コード例は、`then` チェーンメソッドを使用して Promise を表示する方法を示しています。`catch` を使用してエラーを表示できます。

**警告**  
promise コンビネーター (例: `Promise.all`、`Promise.any`、および promise チェーンメソッド (例: `then` および `catch`) を使用すると、関数のメモリ使用量が高くなる可能性があります。関数が[最大関数メモリ](cloudfront-limits.md#limits-functions)クォータを超えると、実行に失敗します。このエラーを回避するには、`promise` メソッドの代わりに `await` 構文を使用することをお勧めします。

```
async function answer() {
    return 42;
}

async function squared_answer() {
   return answer().then(value => value * value)
} 
// Note: async, await can be used only inside an async function. async arguments and closures are not supported.
async function handler(event) {
    // var answer_value = answer(); // returns Promise, not a 42 value
    let answer_value = await squared_answer(); // resolves Promise, 42
    console.log("Answer"+answer_value);
    event.request.headers['answer'] = { value : ""+answer_value };
    return event.request;
}
```