2017-10-07 8 views
1

私は単にGoogleスプレッドシートにあるデータをAlexaに伝えようとしています。私はhttp.get()メソッドの代わりにgoogle-spreatsheet node.jsモジュールを使用しています。ラムダ関数でemit()プロパティを定義する方法

{ 
"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内部プロパティです...私が得る重要なことの一つはこれです、失敗したログ未定義されています。ここでは

は私の意図する機能は、実行結果では

'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); 
    } 
}); 

    } 

です?または、どのようにあなたは放出の特性を定義するのですか?またはそれを間違って読みましたか?

答えて

1

私は問題はあなたがthisあなたがそれをコード化した方法を失ったことだと思います、それはおそらくその非同期シリーズを使用しているからです。一番上にvar self=thisのような行でthisを保存し、代わりにself.emitを使用してください。

関連する問題