使用 async 和 await
CloudFront Functions JavaScript 執行時期函數 2.0 提供處理 Promise 物件的 async 和 await 語法。Promises 代表可以透過函數中標記為 async 的關鍵字 await 存取延遲結果。各種新的 WebCrypto 函數使用 Promises。
如需 Promise 物件的詳細資訊,請參閱 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 鏈接方法查看 Promises。您可以使用 catch 來檢視錯誤。
警告
使用 promise 組合器 (例如 Promise.all、Promise.any) 和 promise 鏈接方法 (例如 then 和 catch) 可能需要高函數記憶體用量。如果您的函數超過函數記憶體配額上限,則無法執行。為了避免此錯誤,建議您使用 await 語法,而非 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; }