簡體   English   中英

為什么這個 Lambda 函數是異步的?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM