[英]Why is this Lambda function async?
此 Lambda 函數執行 http 請求,然后將數據寫入 DynamoDB。 我想知道為什么該函數是異步設置的。 如果它不是異步的,它會不會一樣? 據我所知, await 告訴代碼在 httprequest() 完成后暫停並繼續。 這不是和同步運行代碼一樣嗎?
exports.handler = async (event) => {
try {
const data = await httprequest();
for (var i = 0; i < data.d.results.length; i++){
var iden = Date.now();
var identifier = iden.toString();
datestring.substring(4,6) + "-" + datestring.substring(6,8);
//add to dynamodb
var params = {
Item: {
id: identifier,
date: data.d.results[i].DAY_T,
},
TableName: 'DB'
};
await docClient.put(params).promise();
}
console.log('Document inserted.');
return JSON.stringify(data);
} catch(err) {
console.log(err);
return err;
}
};
async/await 是一種語法糖,它使編寫代碼看起來類似於編寫同步代碼的方式,同時保持異步代碼的所有優點。
本質上是這樣的:
var result = await doSomethingAsync();
console.log(result);
實際上是這樣的:
doSomethingAsync().then(result => {
console.log(result);
});
如果你想象做很多這樣的事情,它很快就會被大量嵌套。 當您也包含錯誤處理時, then
/ catch
方法會變得冗長而冗長。 async/await 允許您以更自然的方式使用 try/catch - 與您用於同步代碼的方式相同。
混合在你的代碼在一個循環中執行多個await
的事實,我需要建立一個承諾列表並在那里做一個Promise.all
。 在不出錯的情況下編寫所有內容都變得非常困難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.