lambda 中的 s3.getObject 在第一次运行时不会返回任何内容,但在此之后会返回任何内容



我在lambda函数中具有以下代码

 var objectData = [];
"GetResearchBlogIntent" : function(){
var bucketParams = {
  Bucket: "etfs-alexa-app",
  Key: "researchBlogs/IndonesiaSecuresMajorityStakeInGrasbergMine.txt"
}
s3.getObject(bucketParams, function(err, data){
     if (err){
       console.info( "Error", err);
     }
     else{
   objectData.push(data.Body.toString("utf-8"));

     }
 })
this.emit(":ask", objectData )}

第一次运行时,这将一无所获,但是无论您运行多少次,除非您完全重置它,否则将从S3中的文本文件中返回正确的信息。

我不明白如何使lambda等待s3.getObject获取信息。

我尝试过:

 "GetResearchBlogIntent" : function(){
    var bucketParams = {
      Bucket: "etfs-alexa-app",
      Key: "researchBlogs/IndonesiaSecuresMajorityStakeInGrasbergMine.txt"
    }
    s3.getObject(bucketParams, function(err, data){
      if (err){
        console.info( "Error", err);
      }
      else{
        objectData.push(data.Body.toString("utf-8"));
        console.info("4")
        context.succeed()
      }
    })
    this.emit(":ask", objectData )
  }

,但我认为我没有正确地执行此操作,因为它只是给我错误的上下文未定义的上下文:

exports.handler = (event, context, callback) => {
var alexa = Alexa.handler(event, context, callback);
    alexa.registerHandlers(handlers);
    alexa.execute();
  };

我还尝试使用回调,但在使用SDK库时不确定正确的语法。

您正在遇到异步问题。当getObject甚至没有启动时,您正在调用emit,这就是为什么您获得空的object的原因。


getObject中调用发射机。

      s3.getObject(bucketParams, (err, data) => {
          if (err) {
            // ...
          } else {
            objectData.push(data.Body.toString("utf-8"));
            context.succeed();
            this.emit(":ask", objectData);
          }
        });

,要么将getObject包装在function中,然后在其末尾致电emit

相关内容

最新更新