如何在 Lambda 函数中定义 emit() 属性

Posted

技术标签:

【中文标题】如何在 Lambda 函数中定义 emit() 属性【英文标题】:How do you define the emit() property in a Lambda Function 【发布时间】:2018-03-18 20:01:55 【问题描述】:

我只是想让 Alexa 说出我的谷歌电子表格中的数据。我正在使用 google-speatsheet node.js 模块而不是 http.get() 方法。

这是我的意图函数

'GetPainterIntent': function() 
        // spreadsheet key is the long id in the sheets URL 
var doc = new GoogleSpreadsheet('1K-dl08g8s27TgF5yMGv_Q5tBbkpRpGWrt3RkUB2mVKk');
var sheet;

async.series([
  function setAuth(step) 
    // see notes below for authentication instructions! 
    var creds = require('./creds.json');
    // OR, if you cannot save the file locally (like on heroku) 
    /*
    var creds_json = 
      client_email: ' ',
      private_key: ' '
    
        */
    doc.useServiceAccountAuth(creds, step);

  ,
  function getInfoAndWorksheets(step) 

    doc.getInfo(function(err, info) 
      console.log('Loaded doc: '+info.title+' by '+info.author.email);
      sheet = info.worksheets[0];

      //console.log('sheet 1: '+sheet.title+' '+sheet.rowCount+'x'+sheet.colCount);
      this.emit('ask:', 'Do you want'+sheet.title+' '+sheet.rowCount+'x'+sheet.colCount);
      step();
    );

  

], function(err)
    if( err ) 
      console.log('Error: '+err);
    
);

     

在执行结果:失败的日志中,我得到的关键之一是这个......

 
 "errorMessage": "RequestId: 79ed1bc9-aaee-11e7-878b-5fe3ebd777ae 
 Process 
 exited before completing request"
 

TypeError: Cannot read property 'emit' of undefined
at getInfoAndWorksheets (/var/task/index.js:51:9)
at /var/task/node_modules/async/dist/async.js:3853:24
at replenish (/var/task/node_modules/async/dist/async.js:946:17)
at iterateeCallback

emit里面的属性是未定义的吗?或者你如何定义 emit 的属性还是我读错了?

【问题讨论】:

【参考方案1】:

我认为问题在于您以编码方式丢失了this,可能是因为它使用了异步系列。将this 保存在顶部,使用var self=this 之类的行,然后改用self.emit

【讨论】:

以上是关于如何在 Lambda 函数中定义 emit() 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何私下定义 lambda 函数?

如何在python中使用lambda函数[重复]

mpvue的自定义组件中运行$emit函数时输入框光标抖动的解决办法

Python lambda函数

Qt不同类之间如何emit信号进行触发操作?

如何在循环中用lambda函数定义一个非常量函数列表?