我正在使用在AWS Lambda中运行的Node中的Alexa技能,并且在发出事件时无法获得回调执行。 Node.JS README的Alexa-skills-kit演示了如何将回调函数传递给事件处理程序,并建议使用箭头函数来保留上下文:
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');
});
}
我试图这样做,但发现我的回调似乎永远不会被执行。我认为这是因为AWS Lambda仅限于Node 4.3.2,并且箭头功能不可用,所以我尝试将这个上下文以旧式方式传回回调:
在新会话处理程序中:
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);
});
},
}
在事件处理程序中:
npm start
我可以看到我在日志中成功检索了帐户ID,但Lambda正在执行而没有错误,也没有调用我的回调函数。我试图弄清楚在Promise中调用回调是否有问题然后'功能,或者是否有其他事情发生。
答案 0 :(得分:0)
确切的问题是承诺然后功能缺乏上下文。我通过使用getAccount处理程序中的箭头函数来修复此问题:
value = {v: k for k, v in TYPES}['Option3']
当然这也表明Lambda Node.JS函数支持箭头函数就好了。