Utilizar async e await
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
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, 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; }