2017-02-26 2 views
0

私は、AWS Lambdaで動作し、イベントを発行したときにコールバックを実行するのに問題があるNodeのAlexaスキルで作業しています。 Node.jsのREADMEのためのアレクサ・スキル・キットには、イベントハンドラにコールバック関数を渡し実証、およびコンテキストを維持するために、矢印の機能を使用することをお勧めします:コールバックをイベントハンドラに渡す

this.emit('JustRight',() => { 
     this.emit(':ask', guessNum.toString() + 'is correct! Would you like to play a new game?', 
     'Say yes to start a new game, or no to end the game.'); 
    }); 

私は同じことをやろうとしているが、それを見つけますよ私のコールバックは決して実行されないようです。私は、AWSラムダは4.3.2をノードに限られており、矢印の機能が利用できないので、これはと思ったので、私はコールバックに戻って昔ながらの方法、このコンテキストを渡してみました:新規セッションハンドラで

をイベントハンドラで
if(!account_id) { 
    console.log('Access token:' + accessToken); 
    this.emit('getAccount', accessToken, function (retrieved_id) { 
     console.log('account id in callback: ' + retrieved_id); 
     this.emit('welcome'); 
    }); 
} 

accountHandler = { 
    'getAccount': function (accessToken, cb) { 
     console.log('fetching account id'); 
     var client = thirdparty.getClient(accessToken); 
     var r = client.getAccountForToken(client); 
     r.then(function (data) { 
      console.log('got it:' + data); 
      this.attributes['account_id'] = data; 
      cb.call(this, data); 
     }).catch(function (err) { 
      this.emit('handleApiError', err); 
     }); 
    }, 
} 

私は成功したログに、アカウントIDを取得するんだけど、ラムダは、エラーなしで、私のコールバック関数を呼び出すことなく、実行されていることがわかります。私は、Promise 'then'関数内でコールバックを呼び出す際に問題があるか、何か他のことが起こっているかどうかを調べようとしています。

答えて

0

正確な問題は、promise関数内にコンテキストがないことでした。私はgetAccountハンドラ内で矢印の機能を使用してこれを固定:

r.then(data => { 
    console.log('got it:' + data); 
    this.attributes['account_id'] = data; 
    this.emit('welcome'); 
}) 

はもちろん、これはまた、ラムダNode.jsの機能がうまく矢印機能をサポートすることを示しています。

関連する問題