

# Utilizar async e await
<a name="async-await-syntax"></a>

As funções do JavaScript runtime 2.0 do CloudFront Functions oferecem as sintaxes `async` e `await` para lidar com objetos `Promise`. Promises representam resultados atrasados que podem ser acessados por meio da palavra-chave `await` nas funções marcadas como `async`. Várias novas funções do WebCrypto usam Promises.

Para obter mais informações sobre objetos `Promise`, consulte [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).

**nota**  
É necessário usar o JavaScript runtime 2.0 para os exemplos de código a seguir.  
`await` pode ser usado apenas dentro de funções `async`. Encerramentos e argumentos `async` não são compatíveis.

```
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;
}
```

O exemplo de código JavaScript a seguir mostra como visualizar Promises com o método de cadeia `then`. É possível usar `catch` para visualizar erros.

**Atenção**  
O uso de combinadores de promessa (por exemplo, `Promise.all` e `Promise.any`) e métodos de cadeia de promessa (por exemplo, `then` e `catch`) pode exigir alto uso de memória da função. Se sua função exceder a cota [máxima de memória da função](cloudfront-limits.md#limits-functions), ela não será executada. Para evitar esse erro, recomendamos usar a sintaxe `await` em vez dos métodos `promise`.

```
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;
}
```