2017-12-30 55 views
0

컨텍스트 : AWS 람다 함수를 사용하여 Alexa 스킬을 만들고 큰 JSON 파일을 넣으 려하지 않고 S3에 넣었습니다. 람다 함수 코드 자체. S3 파일의 내용에 액세스하여 함수의 변수에 할당하려고 했으므로 나머지 코드에서 사용할 수 있지만 제대로 작동하지 않는 것 같습니다. 관련 코드는 물론 콘솔에 인쇄 할 때 볼 수있는 내용은 아래를 참조하십시오.AWS 람다 함수에서 S3의 JSON 파일 사용 (Alexa 용)

람다 기능 :

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"}] 

않는 이유는이 코드를 인쇄 먼저 "셋째 단계"?

답변

0

노드의 모든 내용이 비동기임을 기억하십시오. getObject은 콜백이 트리거되기 전에 리턴합니다. 그 반환 값은 부적합합니다. 응답은 콜백에 의해서만 액세스 될 수 있습니다.

이 단계를 콜백으로 이동하면 예상 한 순서대로 줄을 가져옵니다.

직관적이지 않은 경우 람다를위한 Python과 같은 더 간단한 언어를 선호 할 수 있습니다. js에 전념한다면 async 라이브러리, 특히 waterfall 방법론이 유용 할 것입니다.

+0

인쇄물이 아직 인쇄되어 있어야합니다. –

+0

무엇을 인쇄해야합니까? 콜백의 리턴은 어디에도없고 getObject는 [Object object] 인 AWS.Request를 리턴합니다. 그러나 실제로 콘텐츠로 무엇인가를하는 것은 없습니다. 모든 콘솔 로그 호출이 표시됩니다. –