簡體   English   中英

在AWS Lambda函數中使用S3中的JSON文件(用於Alexa)

[英]Using a JSON file from S3 in AWS Lambda function (for Alexa)

上下文:我正在使用AWS Lambda函數創建Alexa技能,並將大型JSON文件放入S3中​​,而不是嘗試將其放入Lambda函數代碼本身中。 我一直在嘗試訪問S3文件的內容,並將其分配給函數中的變量,以便可以在其余代碼中使用它,但是它似乎無法正常工作。 有關相關代碼,以及在打印到控制台時所看到的內容,請參見下文。

Lambda函數:

var handlers = {

  'LaunchRequest': function() {

    var AWS = require('aws-sdk');
    var s3 = new AWS.S3();
    data = s3.getObject(myParams, function(err, data) {
        if(err) { console.log(err, err.stack);}
        else {
            console.log('First step');
            var fileText = data.Body.toString();
            console.log('Second Step' + fileText);
            return fileText;
        }
    });

    console.log('Third Step' + data);
  }
}

控制台輸出:

Function Logs:
START Version: $LATEST
2017-12-29T23:59:38.585Z        Warning: Application ID is not set
2017-12-29T23:59:40.024Z        Third Step[object Object]
2017-12-29T23:59:40.159Z        First step
2017-12-29T23:59:40.183Z        Second Step[{category1: "test1", category2: "test2", category3: "test3"}]

為什么此代碼首先打印“第三步”?

請記住,節點中的所有內容都是異步的。 getObject將在觸發回調之前返回。 它的返回值無關緊要; 該響應只能由回調訪問。

將這一步移至回調,您將按預期的順序獲得代碼行。

如果您覺得這不太直觀,則可能更喜歡將更簡單的語言(例如Python)用於lambda。 如果您致力於js,則可能會發現async庫(尤其是waterfall方法)很有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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